none
Button via Schleife an bzw. aus Schalten RRS feed

  • Frage

  • Hi,
    ich nun wieder.

    Kann ich mittels einer Schleife Buttons Visible schalten ?

    Was ich meine ist:

    Ich habe 36 Button und möchte sie via Schleife ein oder wieder ausschalten. mit Visible = True (oder Visible = False)


    For i = 1 to 36
    Dim Btn As String = "Btn" & i
    Btn.Visible = True
    Next i

    Aber genau das geht nicht. weil ...???

    Wie muss ich das deklarieren bzw. convertieren damit die Button auch bescheid wissen, welcher von Ihnen nun gemeint ist ?

    Ich habe Btn1 bis Btn 36

     vielen dank
    Freitag, 13. Februar 2009 13:21

Antworten

  • For Each Ct As Control In Me.Controls 
                If Ct.Name.StartsWith("Button"Then 
                    Ct.Visible= False 
                End If 
            Next 

    mit dem Code werden alle Elemente mit unsichtbar gemacht, die mit "Button" beginnen.
    Du kannst natürlich auch den Namen direkt vergleichen mit if ct.name = whatever
    aber dann würde die schleife sehr oft durchlaufen müssen.

    Benenn die Buttons am besten als  btn_setx_y
    btn ... Es ist ein Button
    setx ... Falls du mehrere Gruppen an buttons hat, die du deaktivieren möchtest
    y ... andere bezeichnung, z.B. save für einen Speicherbutton.

    Wenn die 36 Buttons in Groupboxen verstreut sind musst du den code anpassen (statt Me.Controls Groupbox.controls)
    • Als Antwort vorgeschlagen Agnag Freitag, 13. Februar 2009 18:11
    • Als Antwort markiert Bernd Schlepütz Freitag, 13. Februar 2009 21:56
    Freitag, 13. Februar 2009 17:20
  • Da würde ich erstmal die Buttons die sich im Status ändern sollen in ein ArrayList schreiben
       dim ar as ArrayList = new ArrayList
       ar.add(Name_vom_Button)

    und dann bei in der schleife kontrollieren, ob der Button im Array ist:

    For Each Ct As Control In Me.Controls  
                If ar.contains(ct.name) Then  
                     ct.Visible = false 
                End If  
            Next 

    Zuerst musst du allerdings alle Items wieder sichtbar machen
    Freitag, 13. Februar 2009 18:14

Alle Antworten

  • For Each Ct As Control In Me.Controls 
                If Ct.Name.StartsWith("Button"Then 
                    Ct.Visible= False 
                End If 
            Next 

    mit dem Code werden alle Elemente mit unsichtbar gemacht, die mit "Button" beginnen.
    Du kannst natürlich auch den Namen direkt vergleichen mit if ct.name = whatever
    aber dann würde die schleife sehr oft durchlaufen müssen.

    Benenn die Buttons am besten als  btn_setx_y
    btn ... Es ist ein Button
    setx ... Falls du mehrere Gruppen an buttons hat, die du deaktivieren möchtest
    y ... andere bezeichnung, z.B. save für einen Speicherbutton.

    Wenn die 36 Buttons in Groupboxen verstreut sind musst du den code anpassen (statt Me.Controls Groupbox.controls)
    • Als Antwort vorgeschlagen Agnag Freitag, 13. Februar 2009 18:11
    • Als Antwort markiert Bernd Schlepütz Freitag, 13. Februar 2009 21:56
    Freitag, 13. Februar 2009 17:20
  • Hallo Agnag,

    vielen dank für die schnelle antwort, ich werde mich gleich drüber hermachen und ausprobieren.
    Gruppen Funktionieren Super. Kann ich sogar schon brauchen.


    Aber trotzdem möchte  ich nochmals Nachhacken.
    Je nach Programm möchte ich expleziet auf Button zugreifen können und zwar genau von Btn1 bis Btn7. Oder Btn13 bis Btn15 und
    bei Mathematischen Ergebnisse  z.B. 7 * 3 = 21. Also soll nur Btn21 angesprochen werden.
     
    Für mich bedeutet es, das ich versuche eine Variable in einen Namen umzubauen. (Name des Button)
    Beispiel:
    Ergebnis = 21     -> Also Btn 21.Enable = False
    Oder
    Ergebnis = Zahl zwischen 7 und 14 -> Aslo Btn7 bis Btn14   .Enable = False

    Da ich das Ergbnis vorher nicht kenne, kann ich die Button also auch nicht als Gruppen  definieren.
     
    Sorry, ich bin nicht gut im Erklären. Aber vieleicht verstehst du es ja trotzdem !

    vielen dank

    Freitag, 13. Februar 2009 17:41
  • Da würde ich erstmal die Buttons die sich im Status ändern sollen in ein ArrayList schreiben
       dim ar as ArrayList = new ArrayList
       ar.add(Name_vom_Button)

    und dann bei in der schleife kontrollieren, ob der Button im Array ist:

    For Each Ct As Control In Me.Controls  
                If ar.contains(ct.name) Then  
                     ct.Visible = false 
                End If  
            Next 

    Zuerst musst du allerdings alle Items wieder sichtbar machen
    Freitag, 13. Februar 2009 18:14
  • Hi,

    mann muß nur gute ideen haben. und die hast du. kompliment.
    jetzt komme ich mit meinem problem weiter.


    vielen dank
    Freitag, 13. Februar 2009 21:02
  • Gute Ideen und Erfahrung ;)

    Kannst du den Beitrag, der beim Problem geholfen hat als Antwort markieren?
    Freitag, 13. Februar 2009 21:12