2009-11-04 62 views
2

我有一個C#Winform的複選框序列。每個複選框都可以有一些選項,這實際上只是另一組複選框,它們只是在頁面中縮進一點。分層winform複選框

我想要達到的是當您勾選父複選框之一,然後所有它的孩子複選框被打勾。相反,當一個父複選框未被選中時,它的所有子複選框都未被選中。

然後,我需要這樣做,如果一個孩子複選框得到勾選,然後它蜱它的父母,或至少確保父母打勾。也就是說,如果沒有父母,你就不會有孩子。如果一個孩子沒有被打破,那麼如果所有其他的孩子都未被打破,那麼父母就不需要打破了。

我正在做複選框上的事件處理程序,但我遇到了問題,用光標檢查一個子然後以編程方式檢查父程序然後以編程方式檢查它的所有子項。

我會非常appriciate關於如何編程這樣的方式,它沒有這樣的問題的任何意見。

+0

我懷疑你可能使用CheckedChanged事件而不是Click事件,請張貼你正在使用的代碼。 – Lazarus 2009-11-04 17:00:21

回答

3

像這樣的東西應該工作。

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Focused) 
     { 
      checkBox2.Checked = checkBox1.Checked; 
      checkBox3.Checked = checkBox1.Checked; 
      checkBox4.Checked = checkBox1.Checked; 
     } 
    } 

    private void subCheckBox_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox theCheckbox = sender as CheckBox; 
     if (theCheckbox.Focused) 
     { 
      checkBox1.Checked = checkBox2.Checked || checkBox3.Checked || checkBox4.Checked; 
     } 
    } 

複選框2,3和4都與我的示例綁定到相同的處理程序。

希望有幫助!


顯然,這只是一些假設,因爲它只是一個例子。我依靠用戶輸入(聚焦屬性)來控制流量。我敢肯定,還有其他解決方案。

+0

啊我明白了,所以如果複選框是專注的話,你只能做些事情,從而避免我遇到的問題。輝煌。謝謝 – 2009-11-04 21:05:44

2

您還可以使用TreeView控件和TreeView.CheckBoxes = true。這樣你就默認已經有了分層結構。

+0

我考慮過使用這個,但我需要做一些奇怪的事情,我沒有在這裏提到,TreeView不支持。謝謝你的建議 – 2009-11-04 21:06:53