2016-07-19 7 views
-2

Ich versuche, alle Kontrollkästchen in allen Panels, die ich habe, zu deaktivieren. Dies unterscheidet sich von anderen Fragen, da es für jedes Panel eine Checkbox hat. Der Code, den ich jetzt habe, deaktiviert alle Checkboxen im Formular, aber nicht in allen Panels.Wie Sie alle Kontrollkästchen in allen meinen Panels deaktivieren

Ich habe eine Reihe von Panels und Checkboxen in ihnen und es muss eine einfache Möglichkeit, sie alle zu deaktivieren.

dies tut es jedem Checkbox in meiner Form statt nur Platten mein Code:

private void button16_Click(object sender, EventArgs e) 
{ 
    clearStuff((Control.ControlCollection)this.Controls); 
} 
private void clearStuff(Control.ControlCollection obj) 
{ 
    foreach (Control control in obj) 
    { 
     if (control.HasChildren) 
      clearStuff(control.Controls); 
     else 
      if (control is CheckBox) 
      { 
       CheckBox check_box = (CheckBox)control; 
       check_box.Checked = false; 
      } 
    } 
} 

dies funktioniert, aber es könnte

foreach (Panel control2 in this.Controls.OfType<Panel>()) 
{ 
    foreach (CheckBox control1 in control2.Controls.OfType<CheckBox>()) 
    { 
     control1.Checked = false; 
    } 
} 
+0

Sie nicht Unter der Annahme, Refactoring Aufrechterhaltung eine Liste von Steuerelementen in Ihrem Code, müssen Sie auch die Kinder von Steuerelementen (und deren Nachkommen) suchen. Ihr Code überprüft nur eine Ebene. Hier ist ein Beitrag, der verschiedene Möglichkeiten zeigt: http://stackoverflow.com/questions/3419159/how-to-get-all-child-controls-of-a-windows-forms-form-of-a-specific- type-button – keyboardP

+0

Sie müssen rekursive Methoden verwenden. Wenn die Kontrolle ein Kind hat, dann gehe hinein und überprüfe ob checkBox. –

+0

Kann ich sie alle mit den Codes in diesem Link deaktivieren? –

Antwort

0
private void button16_Click(object sender, EventArgs e) 
{ 
    clearStuff((Control.ControlCollection)this.Controls); 
} 

public void clearStuff(Control.ControlCollection controls) 
{ 
    foreach (Control c in controls) 
    { 
     if (c is Panel) 
     { 
      clearStuff(c); 
     } 
     else if (c is Checkbox) 
     { 
      c.Checked = false; 
     } 
    } 
} 
+0

Das ist im Wesentlichen, was sie jetzt tun und das Problem nicht beheben werden. –

+0

hmm ... Wenn Sie die Checked-Eigenschaft auf false setzen, sollten Sie das CheckBox-Steuerelement deaktivieren. Ich schätze, die Checkboxen sind verschachtelt in anderen Controls ... – kimbaudi

+0

Das ist seine ganze Frage –

Verwandte Themen