C# Buttons variabel ansteuern

DigZan

Cadet 2nd Year
Registriert
Aug. 2020
Beiträge
17
Hallo
ich wollte in Windows Forms App einen Button mit 2 variablen i und o ansteuern. in VB Controls("Button" & i & o).Text = ""
aber ich habe keinen Lösungsweg in C# gefunden!
Kann mir da wer helfen?
Danke im voraus
 
Die Button IDs sind Variablen. Also entweder diese in ein Dictionary packen oder nen switch/if-else Zweig machen.

Falls du die Buttons sowieso programmatisch generierst, ist das Dictionary natürlich naheliegen.

Dictionary:
Code:
var buttons= new Dictionary<string, Button>()
        {
            ["Button11"] = button11,
            ["Buttonab"] = buttonab ,
            ["Buttoncd"] = buttoncd
        };
buttons["Button"+i+o"].Text="";

switch:
Code:
switch("Button"+i+o){
case "Button12": button12.Text=""; break;
case "Buttonab":buttonab.Text=""; break;

Ich denke, das Pattern ist klar.

(Nitpick: Mit Reflection geht es natürlich VB Style, aber das ist seeehr schlechter Stil)
 
@Hancock wenn ich ein Binding auf die Buttons lege, werden die doch vom jeweiligen Objekt angesteuert und somit auch entsprechend der Inhalt an diese verwiesen? Sei es de-/aktivieren, ändern vom angezeigten Text o.Ä.

Dafür gibt es auch PropertyChanged. Das mag zwar vielleicht alles etwas oversized sein, wäre aber theo. gesehen der richtige Weg. Kurz: Für das "bisschen" ist der Spaß oversized, Reflexion ist schon ein Ansatz hier.

Andernfalls kann ich das PostSharp-Framework nur ans Herz legen. :)
 
Das Problem ist immer, dass die Idee, dass man Daten- und String-getrieben auf Elemente zugreifen will.

Aber ich hab grade noch mal nachgedacht (und gegooglet): Die Form hat ein Element "Controls", das könnte man durchlaufen und bei jedem Control nach dem Namen schauen. (Scheinbar wird der Name des Controls mitgespeichert.)

Mglw. funktioniert daher sowas wie
Code:
var form=this;
var name="...";
Control btn=null;
foreach(var control in form.Controls){
if(control.name==name){
btn=control;
break;
}
}
btn.Text="Hallo";
Das geht mglw auch in linq.
 
Wäre es nicht sinniger mittels dem u.g. Beispiel? Die Schleife zu durchlaufen, für eine "nur" deklarierte Variable ist wohl eher unnütz, als Vorteilhaft. Du durchläufst ja letztlich alle Control-Elemente. Das ganze kann natürlich auch ungeahnt ausgeweitet werden. Je nachdem, wie der TA das möchte. 😉😋

Code:
Control MyControl = form.Controls.Cast<Control>().FirstOrDefault(Entity => Entity.GetType() == typeof(Button) && Entity.Name == "Hello_World");
if (MyControl is null) throw new Exception("control not found");


Der Autor will den Button mittels Variablen ansprechen. Also wird er NICHT um DataBinding sowie PropertyChanged herum kommen, korrekterweise. Anderenfalls muss er die Buttons vorher zwischenspeichern, mit einer Schleife durchlaufen und dann setzen. Das ist aber sicherlich nicht eleganter gelöst, als das erstere..
 
Zurück
Oben