Entwickler-Ecke
WinForms - Controls zur Laufzeit erstellen und ansprechen
erfahrener Neuling - Fr 08.04.16 10:52
Titel: Controls zur Laufzeit erstellen und ansprechen
Hallo,
es wurde warscheinlich schon ziemlich oft gefragt, aber heute bin ich einfach zu verkatert, um die Sache selbst anzugehen. :eyes:
Könnte mir einer kurz und knapp erklären, wie ich ein Control (zB einen Button) so erstelle, dass ich ihn später mit nummeriertem Namen ansprechen kann (Controls.Button[i]...).
Das ganze soll 2 Programmen dienen:
1. dem Hauptprogramm, welches Control Daten aus einer Textdatei ließt und anhand dieser Daten zB Buttons anzeigt, anordnet und anklickbar macht.
2. einem Editor, mit dem man Felder individuell erstellen kann, anordnen usw und diese dann als Datenstruktur in besagte Textdatei schreibt
Also im Grunde geht es mir um die Erstellung und hinzufügen zu Controls und um die Abfrage zB in einem Click-Event.
Für Codebeispiele und Lösungs-/Denkansätze wäre ich sehr dankbar! Bitte nicht mit www.google.de o.Ä. antworten, dazu bin ich heute nicht fähig :nut:
Ralf Jansen - Fr 08.04.16 11:26
In seiner Frage ein 'ich bin heute zu faul macht das bitte für mich' unterzubringen ist für einen potentiellen Helfer extrem motivierend. Viel Glück beim lösen deines Problems.
Th69 - Fr 08.04.16 11:33
Tipp: Lass dir per Designer den entsprechenden Code erzeugen und kopiere ihn einfach aus der .designer.cs-Datei heraus.
erfahrener Neuling - Fr 08.04.16 11:57
@Th69
Zitat: |
Tipp: Lass dir per Designer den entsprechenden Code erzeugen und kopiere ihn einfach aus der .designer.cs-Datei heraus. |
Also wie der Code für das hinzuzufügende Control auszusehen hat, weiß ich schon (denke ich zumindest)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| private void buttonCreateLabel_Click(object sender,EventArgs e) { Label label = new Label(); label.AutoSize = false; label.Size = new Size(140,40); label.BackColor = SystemColors.ActiveCaption; label.AutoEllipsis = true; label.Location = new Point(x,y); label.Name = "label" + amountOfLabels + 1; label.Click += new System.EventHandler(this.label_Click); this.Controls.Add(label);
this.amountOfLabels++; this.x = this.x + 100; }
private void label_Click(object sender, EventArgs e) { } |
Also das geht ja dann glaub ich mit Controls.??? oder geht das auch über sender?
@Ralf Jansen
Zitat: |
In seiner Frage ein 'ich bin heute zu faul macht das bitte für mich' unterzubringen ist für einen potentiellen Helfer extrem motivierend. Viel Glück beim lösen deines Problems
|
Es ging mir ja nur darum, einen gewissen Ansatz zu finden (über google bin leider nicht fündig geworden). Ansonsten will ich's ja schon alleine Lösen und verstehen ;)
EDIT: in der Fragestellung habe ich zwar von Buttons gesprochen, aber eigentlich benutze ich labels, die als Button fungieren
Ralf Jansen - Fr 08.04.16 12:01
Wenn du bestimmte Controls auch noch direkt ansprechen willst packe sie nicht nur in die Controls Collection sondern zusätzlich in irgendeine Liste die du selbst verwaltest und damit besser unter Kontrolle hast.
Also wenn es z.B. nur um Labels geht dann zum Beispiel eine
List<Label> oder wenn du die über Ihren Namen finden willst (denn du in auch Label.Name reinschreibst) kannst du ein
Dictionary<string, Label> nehmen und als Key halt den Namen eintragen.
Edit: Oder wenn du die nur in Events brauchst
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private void label_Click(object sender, EventArgs e) { Label label = sender as Label; if (label != null) { } } |
erfahrener Neuling - Fr 08.04.16 12:12
Ja im Moment reicht das Event aus, genau das braucht ich :zustimm:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!