Guten abend,
unten seht ihr ein Bild, wie mein Chat dargestellt wird.
"Player" ist ein Button Steuerelement.
Darunter eine Listbox, die Eingabe ist eine RichTextBox und der Pfeil ist auch ein Button.
Die Elemente sind alle auf einem Panel.
Ich wollte das Layout des Chats halt öfter erstellen, also habe ich eine neue Klasse erstellt und vom Panel geerbt.
Hier seht ihr einmal die Klasse:
public class PanelChat : Panel
{
Button btnPlayerName, btnChatSend;
ListBox lbChat;
RichTextBox rtbChat;
public PanelChat(int ChatCount, string Player)
{
btnPlayerName = new Button();
btnChatSend = new Button();
lbChat = new ListBox();
rtbChat = new RichTextBox();
btnPlayerName.Name = "btnPlayerName" + Convert.ToString(ChatCount + 1);
btnPlayerName.Text = Player;
lbChat.Name = "lbChat" + Convert.ToString(ChatCount + 1);
rtbChat.Name = "rtbChat" + Convert.ToString(ChatCount + 1);
btnChatSend.Name = "btnChatSend" + Convert.ToString(ChatCount + 1);
}
protected override void OnPaint(PaintEventArgs e)
{
this.Size = new Size(200, 371);
base.OnPaint(e);
///btnPlayerName
this.btnPlayerName.BackColor = System.Drawing.Color.RoyalBlue;
this.btnPlayerName.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnPlayerName.ForeColor = System.Drawing.Color.White;
this.btnPlayerName.Location = new System.Drawing.Point(0, 0);
this.btnPlayerName.Name = "btnPlayerName";
this.btnPlayerName.Size = new System.Drawing.Size(200, 36);
this.btnPlayerName.TabIndex = 13;
this.btnPlayerName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnPlayerName.UseVisualStyleBackColor = false;
/////lbChat
this.lbChat.FormattingEnabled = true;
this.lbChat.ItemHeight = 18;
this.lbChat.Location = new System.Drawing.Point(0, 36);
this.lbChat.ScrollAlwaysVisible = true;
this.lbChat.Size = new System.Drawing.Size(200, 238);
this.lbChat.TabIndex = 10;
/////rtbChat
this.rtbChat.Location = new System.Drawing.Point(0, 274);
this.rtbChat.Size = new System.Drawing.Size(162, 96);
this.rtbChat.TabIndex = 11;
this.rtbChat.Text = "";
/////btnChatSend
this.btnChatSend.BackColor = System.Drawing.Color.RoyalBlue;
this.btnChatSend.BackgroundImage = Skat.Properties.Resources.long_arrow_right;
this.btnChatSend.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.btnChatSend.Location = new System.Drawing.Point(160, 274);
this.btnChatSend.Size = new System.Drawing.Size(40, 96);
this.btnChatSend.TabIndex = 12;
this.btnChatSend.UseVisualStyleBackColor = false;
this.Controls.Add(rtbChat);
this.Controls.Add(btnPlayerName);
this.Controls.Add(lbChat);
this.Controls.Add(btnChatSend);
}
}
Mein Problem, es wird nur die ListBox und die RichTextBox angezeigt.
Wenn ich auf der Form dann auf die beiden Buttons drücke, wo sie eigentlich sind, erscheinen sie.
In der RichTextBox kann ich nichts schreiben.
Hatte die RTB ebend mit einer normalen TextBox ausgetauscht.
Ich konnte zwar was schreiben, es wurde aber nicht angezeigt, weil es die ganze Zeit neu gezeichnet wird?
Wenn ich beispielweise nur den Button "btnPlayerName" und die ListBox "lbChat" hinzufüge, sieht man die beiden direkt. Aber sobald die RTB hinzukommt, funktioniert es nicht mehr richtig.
Kann es sein, dass du die RichTextbox als letztes hinzufügst und diese somit deine Buttons verdeckt?
Ruf das Controls.Add
für die RichTextbox mal vor den anderen Sachen auf.
OnPaint ist der vollkommen falsche Ort um Controls hinzuzufügen. Schau Dir die Dokumentation zu OnPaint an...
Warum verlagerst Du den Code, den Du im OnPaint hast nicht einfache ebenfalls in Deinen Constructor?