Entwickler-Ecke
WinForms - Form1 Controls.Add aber wie??
covel - Mo 10.11.08 17:02
Titel: Form1 Controls.Add aber wie??
Hallo,
ich bin ein Neuling in C#!! Habe folgende Frage:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Button button; button = new Button(); button.Name ="Test"; button.Text = "test"; button.Left=50; button.Top=50; button.Width = 100; button.Height = 20; button.Visible = true; panel1.Controls.Add(button); |
Wie kann ich den Button der Form1 zuweisen? Bzw. warum wird der Button ohne "panel1.Controls.Add(button);" nicht auf der Form1 angezeigt?
jaenicke - Mo 10.11.08 17:06
Ohne jetzt zu wissen ob das in C# wie in Delphi ist:
In Delphi musst du den Parent auf das entsprechende Control setzen, in diesem Fall auf das Panel, du kannst es ja einfach ausprobieren.
C#-Quelltext
1:
| button.Parent = panel1; |
// EDIT:
Scheint ja doch zu stimmen^^
csharper - Mo 10.11.08 17:09
Mal eine Frage. Wie erstellst du deine Form? Wenn du die Entwurfsansicht hast kann man doch einfach den Button auf die Form ziehen und fertig.
Beschreib mal nochmal genauer dein Problem.
Grüße
JüTho - Mo 10.11.08 17:11
Falsch, C# arbeitet nicht wie Delphi!
In C# werden Controls dadurch zum Anzeigen gebracht, dass sie in die Controls-Auflistung des übergeordneten Controls eingetragen werden. MyForm.Controls enthält die Controls der obersten Ebene (Panels, ToolStrips u.ä.), MyPanel.Controls enthält die Controls dieses Panels usw. Wenn alle Controls eines Formulars durchlaufen bzw. durchsucht werden müssen, muss dies rekursiv über die Controls-Eigenschaft laufen.
covel hat folgendes geschrieben : |
| Bzw. warum wird der Button ohne "panel1.Controls.Add(button);" nicht auf der Form1 angezeigt? |
In diesem Fall ist der Button Bestandteil von panel1, und panel1 ist Bestandteil des Formulars.
Wenn Du die Designer.cs genauer durchsuchst, wirst Du auf mehrere solcher Festlegungen stoßen und damit Dein Verständnis vergrößern.
Gruß Jürgen
covel - Mo 10.11.08 21:50
Ich wollte einfach nur einen "Button" per Button_Click erzeugen.
Nachdem ich mir die Designer.cs angeguckt habe wurde mir einiges klar. Danke für die Hilfe
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| private void button1_Click(object sender, EventArgs e) { this.SuspendLayout(); Button button = new Button(); button.Location = new Point(10, 10); button.Size = new Size(75, 25); button.Text = "OK";
this.Controls.AddRange(new Control[] { button}); this.ResumeLayout();
} |
Kha - Mo 10.11.08 21:56
Nur weil der Desginer AddRange benutzt, heißt das nicht, dass dein Add vom Anfang falsch war ;) . Und Suspend/ResumeLayout brauchst du auch erst bei vielen Controls auf einmal.
covel - Mo 10.11.08 23:58
Ich bin heute erst wirklich angefangen mich mit C# zu beschäftigen. Von daher muss ich noch einiges nachlesen und werde sicherlich noch einige "dumme" Fragen stellen.
Th69 - Di 11.11.08 11:01
Nur noch mal als Klarstellung:
Die Lösung von jaenicke (wie in Delphi) funktioniert auch in C# (.NET).
Die meistverwendete Methode (u.a. auch vom VS-Designer) ist jedoch, wie JüTho schon beschrieben hat, mittels Controls.Add(...) bzw. Controls.AddRange(...).
Hier noch das Zitat aus der MSDN zu Control.Parent:
| Zitat: |
Control.Parent-Eigenschaft:
Ruft den übergeordneten Container des Steuerelements ab oder legt diesen fest.
|
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!