Announcement

Collapse
No announcement yet.

Button erkkennen / zuweisen per string

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Button erkkennen / zuweisen per string

    VS2008, Vista

    Habe mehrere Buttons angelegt.
    Name:Button1,Button2,Button3,...
    Möchte nun bei Button2 eine Property ändern.
    Wie geht das syntaktisch korrekt ?.
    Vielen Dank.

    Code:
    int ButtonNummer = DicSpalteBtnNr[SpalteNr];
    if (ButtonNummer > 0)
    {
          string ButtonName = "Button" + ButtonNummer.ToString();
          //Button b3 = ButtonName as Button;  //geht nicht
          //b3.FlatStyle = FlatStyle.Flat;
    
          (ButtonName as Button).FlatStyle=FlatStyle.Flat ; //geht nicht
     
    }

  • #2
    Der Indexer der Controls-Auflistung akzeptiert auch String-Keys -> das ist der Lösungsweg.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo,

      du bist schon so lange dabei. Wie kommst du auf die Idee, dass so etwas oder dein letzter Versuch gehen könnte:
      Code:
      Button b3 = ButtonName as Button;  //geht nicht
      Du müsstest eigentlich wissen:
      • Ein String ist etwas anderes als ein Button.
      • Die Klassenhierarchie von Button endet (wie bei jeder Klasse) bei Object; dies gilt auch für String.
      • Beide Klassen liegen in verschiedenen Vererbungszweigen, können also niemals und unter keinen Umständen ineinander konvertiert werden.
      • Du erwähnst den Namen eines Buttons. Was ist das denn wohl? Doch ebenfalls eine Eigenschaft (= Property). Erkennst du den Unterschied zwischen einem bestimmten Forumsnutzer (der sich hier BB nennt, in einem anderen Forum vielleicht Quatschkopf und in Wirklichkeit Hans Meier heißt) und seinem Namen BB?
      • In der SDK-Doku/MSDN gibt es viele Möglichkeiten der Suche, z.B. per Index oder per "Alle Member" nach passenden Eigenschaften und Methoden.

      Deine Frage muss vollkommen neu formuliert werden: Ich suche ein Objekt der Klasse Button, dessen Name "Button2" heißt. Wo muss das gesucht werden? Auf einem Panel oder einer GroupBox, aber auf jeden Fall auf einem Formular. Alle Controls eines Formulars sind (ggf. per Rekursion) enthalten in der Collection Form.Controls. Also können wir sagen:
      Suche (engl. Find) auf Form.Controls ein Element mit der Eigenschaft "Name = Button2" vom Typ Button.
      Dann schauen wir mal nach, was es bei Form.Controls für Methoden gibt. Und siehe da, ich finde folgende Inhaltsangabe:
      Sucht nach Steuerelementen anhand ihrer Name-Eigenschaft und erstellt ein Array aller übereinstimmenden Steuerelemente.
      Nun musst du nur noch selbst nachschlagen und die dortigen Hinweise beachten.

      Etwas mehr Eigeninitiative bitte! Jürgen

      @Gü
      Das gilt nicht immer, deshalb habe ich das nicht erwähnt. Vor allem habe ich mich aber über das fehlende Grundwissen geärgert.

      Comment


      • #4
        Vielen Dank für den Hinweis,
        Das Control wird gefunden, aber die Zuweisung des Wertes
        funktioniert nicht.
        Wie klappts ?.
        Vielen Dank.


        Code:
         Control[] kControl= this.Controls.Find(ButtonName,true);
        if(kControl is Button)
        {
               kControl.SetValue(FlatStyle,FlatStyle.Flat);   //geht nicht
               kControl.SetValue("FlatStyle", FlatStyle.Flat);  //geht nicht
        }

        Comment


        • #5
          Du kannst doch nicht auf dem Array den Wert FlatStyle setzen. Ein Array hat keine Eigenschaft FlatStyle.

          Obwohl ich wirklich mal ein OO-Buch empfehlen würde, hier trotzdem eine Möglichkeit:

          [highlight=c#]
          Control[] kControl= this.Controls.Find(ButtonName,true);

          foreach(Control control in kControl)
          {
          Button myButton = control as Button;
          if(myButton != null)
          {
          myButton.FlatStyle = FlatStyle.Flat;
          }
          }
          [/highlight]

          Comment


          • #6
            Vielen Dank für die Hinweise.
            So funktionierst am kürzesten / schnellsten.

            Code:
            Control[] kControl= this.Controls.Find(ButtonName,true);
            (kControl[0] as Button).FlatAppearance.BorderColor = Color.FromName("white");

            Comment


            • #7
              So funktionierst am kürzesten / schnellsten.
              wenn einem Fehlerhandling egal ist.

              Comment

              Working...
              X