Entwickler-Ecke
WinForms - Buttons / TextBox über Index ansprechen
Holger_S - So 16.09.12 22:27
Titel: Buttons / TextBox über Index ansprechen
Hallo liebe Community,
ich bin leider kein Experte aber ich versuch mich ein wenig zu verbessern.
Leider stecke ich grade fest und suche Hilfe.
Folgendes Problem:
Ich möchte Buttons und Textfelder mit hilfe von Variablen ansprechen in einer Methode.
Das soll wiefolg aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public void methode ( int a , int b ) {
button[a].enabled = false; textBox[b].Text = "Test";
} |
Kurze Anmerkung !
Die Buttons sind via WinForm gesetzt und in recht großer Anzahl vertreten dort.
D.h. ich kann es meines Wissens nach nicht mit einem Feld von Buttons lösen.
Das ist jetzt nur ein Beispiel und sehr vereinfacht, mit geht es in erster Linie um dieses Problem.
Ich hoffe jemand kann mit helfen oder einen Tip geben :)
Vielen Dank !
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mo 17.09.2012 um 07:45
Christian S. - Mo 17.09.12 08:59
Hallo!
Zwei Möglichkeiten hast Du:
Entweder Du erstellst die Komponenten nicht mit dem Designer, sondern im Quelltext:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Button[] buttons = new Button[10];
for(int i = 0; i < buttons.Length; i++) { buttons[i] = new Button(); buttons[i].Left = 42; buttons[i].Top = 45; buttons[i].Text = "Foo"; buttons[i].Parent = this; } |
Dann kannst Du einfach per Index drauf zugreifen.
Oder Du suchst die Komponenten anhand ihres Namens:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public void methode ( int a , int b ) { var aButton = (Button) this.Controls.Find("button"+a.ToString(), true); var bTextBox = (TextBox) this.Controls.Find("textBox"+b.ToString(), true);
aButton.enabled = false; bTextBox.Text = "Test"; } |
Da solltest Du dann aber noch ein paar Prüfungen einbauen, ob die Komponenten auch wirklich gefunden wurden.
Grüße,
Christian
Holger_S - Mo 17.09.12 09:52
Ja, das hilft mir weiter.
Die erste Variante kommt leider nicht in Frage aber ich versuch mich an der Zweiten :)
Vielen Dank !
Th69 - Mo 17.09.12 10:36
Hallo Holger_S,
es ist trotzdem ein sehr schlechtes Design, wenn die Controls alle direkt per Designer gesetzt sind und nur die fortlaufenden Namen wie "buttonX" oder "labelY" tragen.
Entweder man benennt die Controls vernünftig und spricht sie dann einzeln an, oder aber man verwendet ein passendes Containercontrol (z.B. DataGridView, TableLayoutPanel). Ein weiterer Ansatz ist die Verwendung von UserControls und dynamischer Erstellung (so wie Christian schon geschrieben hat - wobei m.E. im allgemeinen eine List<T> besser wäre).
Könntest du evtl. einen Screenshot von deiner Form posten (bzw. als Dummy)? Dann kann ich dir einen konkreteren Tipp geben.
Holger_S - Mi 19.09.12 21:21
Hallo und vielen Dank für die freundliche Hilfe.
Mittlerweile habe ich das eingesehen und nochmal von Vorne gestartet.
Es ist völlig richtig das ein UserControl hier angebrachter ist als das was ich vor hatte.
Natürlich sind mir da "programmiertechnisch" meine mangelnden Fertigkeiten im Weg.
:(
Aber Danke für das freundliche Angebot!
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!