2017-11-12 9 views
-3

Ich habe einen Code in C# mit 26-Taste drin und ich will sie alle deaktiviert werden, bis der Benutzer etwas tut, aber ich möchte nicht kopieren/einfügen button1.Enable = false; Button2.Enable = false ... So ist es eine Möglichkeit, so etwas zu tun:Ist es möglich, eine Schaltfläche in eine Variable zu verwandeln?

for (int i = 1; i < 26; i++) 
    { 
    button+i.Enable = false; 
    } 

Vielen Dank für Ihre Hilfe.

+0

Versetzen Sie sie in ein Array, suchen Sie sie nach dem Namen in einer Steuerelementkollektion, verwenden Sie reflecting, wählen Sie eins aus. Es gibt wahrscheinlich viel mehr Möglichkeiten, als ich angegeben habe. Welche Art von Projekt ist es, Web? Winformen? wpf? –

Antwort

0

entweder von Controls.Find oder Controls.OfType<Button>() Verwendung funktioniert nur während der Laufzeit. Ich bevorzuge einen statisch überprüfbaren Kompilierungsansatz. Wenn Sie dann eine Schaltfläche im Formular löschen, wird der Code nicht kompiliert. Hilft Ihnen das typsichere Gefühl zu geben.

Ich mache es so. Beginnen Sie mit einem Feld auf die Tasten in einem Array zu halten:

private Button[] _buttons = null; 

die Array Set einmal in Ihrem Initialisierungscode:

_buttons = new[] { button1, button2, button26 }; 

Dann, wenn Sie etwas mit den Tasten tun müssen, um Sie dies nur tun:

foreach (var button in _buttons) 
{ 
    button.Enable = false; 
} 
0

können Sie verwenden Form.Controls.Find()

for (int i = 1; i < 26; i++) 
{ 
    this.Controls.Find("button" + i, searchAllChildren: false).Enable = false; 
} 

Der Code setzt voraus, Ihre Tasten button1 durch button26 benannt sind.

Es ist nicht direkt möglich wie du bist, aber das macht sowieso keinen Sinn.

+0

Wenn es winforms/wpf ist, kann dies funktionieren, aber es ist eine Vermutung. –

1

Wahrscheinlich möchten Sie Tasten direkt iterieren.

foreach(var button in this.Controls.OfType<Button>()) 
{ 
    button.Enable = false; 
} 
Verwandte Themen