Wie kann man mit einem String ein Textbutton "namentlich" ansprechen und dessen "Funktionen" nutzen



  • Hi Leuts

    diesmal ist es kurz erklärt, aber umso erstaunlicher, das ich mit der Suchfunktion kein Ergebnis erzielt habe ... 😞

    Ich habe einen String, welchen ich exakt so bennant habe wie einen Button.
    Ich möchte nun die Beschriftung des Buttons ändern und dazu diesen string benutzen, da er ja nunmal direkt den korrekten Namen beinhaltet.

    Normalerweise geht das ja mit:

    Buttonname.Text = "Hier steht die Beschriftung";
    

    Mein Problem ist jedoch, das ich zwar den String exakt wie die geforderte "Anweisung" (also "Buttonname.Text") benennen kann, dieses ganze Dingen dann aber nicht wie ein "Befehl" sondern weiterhin wie ein String behandelt wird.

    Kurzum gesagt ... die Beschriftung des Buttons ändert sich nicht.

    Wie kann man das lösen ? Wie kann ichmit meinem String den Button so ansprechen, das er seine Beschriftung ändert ?

    MFG
    Marco





  • Danke für die Antwort

    Darf ich um noch einen Hinweis bitten ? Ich hab jetzt schon mehrere Stunden mit suchen verbracht, aber fast überall wird der anzusprechende Button hardcodiert.

    Bei mir existiert er ja nur als String, ich kriege keinen Zugriff auf die ".Name", oder ".Text" funktion.

    MFG
    Marco



  • Es gibt keine solche Befehlsschnittstelle. Weshalb willst Du es so mit Strings lösen?



  • witte schrieb:

    Es gibt keine solche Befehlsschnittstelle. Weshalb willst Du es so mit Strings lösen?

    Relativ "einfach" erklärt:

    Ich lese aus meiner XML-Datei verschiedene Werte aus. Diese Werte möchte ich jetzt den Buttons, Textfeldern und Labels zuweisen.

    Das würde natürlich auf dem "normalen" Wege gehen, erzeugt aber sehr viel Code.

    Deshalb hätte ich es sehr gerne so gelöst gehabt, das ich das Ganze wie mit einer Schleife lösen kann. Wäre die wohl etwas "feinere" Art gewesen.

    "Ziel" (Button, Textfeld, oder Label) und dessen "Wert" werden also als string aus der XML-Datei ausgelesen.

    Wenn es nicht anders geht muss ich es hardcoden, ist ja kein Problem, aber etwas "unschöner" wie ich finde. Zudem halt wesentlich mehr Codezeilen als durch eine Schleife.

    Andere Methoden sind natürlich auch willkommen, mir war nur diese eingefallen, zumal es zwingend vorgegeben ist, das die Werte aus der XML-Datei kommen uns somit als String vorliegen.
    Ich üersönlich wüßte es nicht anders (oder besser) zu lösen.

    MFG
    Marco



  • Du kannst mit Reflection arbeiten.

    Habe dein Problem nur überflogen. Eine designtechnisch schöne Lösung habe ich gerade nciht parat, weil ich keine Zeit habe, mich in dein Problem richtig reinzudenken...



  • Wieso nich umgekehrt ? Frag alle Controls ab, nutze den Namen um den Text aus der XML Datei zu lesen.

    foreach(Control ctrl in Controls
    {
       ctrl.Text = leseausxml(ctrl.Name,defaultwert);
    }
    


  • dEUs schrieb:

    Habe dein Problem nur überflogen. Eine designtechnisch schöne Lösung habe ich gerade nciht parat, weil ich keine Zeit habe, mich in dein Problem richtig reinzudenken...

    Eine designtechnisch schöne Lösung:
    Er könnte versuchen, die XML-Datei in XAML zu transferieren und die Anwendung mit WPF fahren. 🙂



  • witte schrieb:

    dEUs schrieb:

    Habe dein Problem nur überflogen. Eine designtechnisch schöne Lösung habe ich gerade nciht parat, weil ich keine Zeit habe, mich in dein Problem richtig reinzudenken...

    Eine designtechnisch schöne Lösung:
    Er könnte versuchen, die XML-Datei in XAML zu transferieren und die Anwendung mit WPF fahren. 🙂

    Haha 😃 👍
    Sagt dir das Wort Overkill was? 😉



  • witte schrieb:

    Er könnte versuchen, die XML-Datei in XAML zu transferieren und die Anwendung mit WPF fahren. 🙂

    Ihr wollt mich wohl verscheuchen 😃 😉 😮

    Als Anfänger suche ich natürlich die "einfachste" Möglichkeit (aber natürlich auch gleichzeitig eine "schöne"). Ich dachte halt es wäre relativ "einfach" möglich.

    Alle Controlbuttons abfragen ist möglich, sollte sogar gehen, ich befürchte jedoch, das ich bei der Syntax probleme kiegen werde ... dem werd ich mich wohl stellen müssen ... ich wills ja erlernen 😕

    MFG
    Marco



  • Die Controls kann man auch über den Namen ansprechen:

    public SetText(string name,string text)
    {
      this.Controls[name].Text = text;
    }
    

    Wenn du etwas einstellen willst das nicht in allen Controls vorkommen,musst du das Control vorher konvertieren:

    public SetDialogResult(string name,DialogResult result)
    {
      Button b = this.Controls[name] as Button;
      if(b is null) return;
      b.DialogResult = result.
    }
    

Anmelden zum Antworten