Benutzer mit den meisten Antworten
Button via Schleife an bzw. aus Schalten

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
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
-
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- Als Antwort markiert Bernd Schlepütz Freitag, 13. Februar 2009 21:55
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
-
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- Als Antwort markiert Bernd Schlepütz Freitag, 13. Februar 2009 17:42
- Bearbeitet Bernd Schlepütz Freitag, 13. Februar 2009 18:51
- Tag als Antwort aufgehoben Bernd Schlepütz Freitag, 13. Februar 2009 18:52
- Als Antwort markiert Bernd Schlepütz Freitag, 13. Februar 2009 21:56
- Tag als Antwort aufgehoben Bernd Schlepütz Freitag, 13. Februar 2009 21:56
-
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- Als Antwort markiert Bernd Schlepütz Freitag, 13. Februar 2009 21:55