2015-05-02 62 views
-1

我試圖做到這一點,所以當checkBox被選中時,所有其他checkBox的選中狀態將被取消選中。我知道還有其他一些方法可以做到這一點,但我怎麼會這樣做呢?另外,如果用戶試圖取消選中當前選中的框,它應該保持檢查狀態。控制CheckBox的問題

private void checkState(CheckBox b) 
     { 

      for (int i = 0; i < cb.Count; i++) 
      { 
       if (cb[i] != b) 
       { 
        cb[i].Checked = false; 
       } 
       //else 
       //{ 
       // cb[i].Checked = true; 
       //} 
      } 

      b.Checked = true; 

     } 
+3

什麼使用RadioButton?是否需要使用複選框? –

回答

2

對於這種行爲,你應該使用RadioButton(一組人),而不是複選框,因爲這是他們的自然行爲。

參考文獻:

Radio Button - MSDN

Example

更新:如果你仍然想用checkbutton做到這一點,甚至對我們的建議,你可以做這樣的事情:

1º創建一個函數來修改控件組。檢查他們是否正在改變。如果不是這樣,他們需要uncheked

Private Sub modify(ByVal sender As CheckBox) 

    For Each item As CheckBox In Me.Controls 

     If (item.Equals(sender) = False) Then 
      item.Checked = False 
     End If 

    Next 

End Sub 

注意:因爲我在VB寫的,通知比Me意味着實際的形式,由this在C#取代。無論如何,你應該在那裏放置你的checkbox組的家長控制權。

2º在每個複選框的click事件中調用此函數。我寧願click而不是CheckedChanged不要強制第二次調用函數遞歸。

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged 
    modify(sender) 
End Sub 
+0

我已經嘗試過他們,並且對於手頭的任務來說效果不佳。有沒有辦法用複選框做到這一點? – Mercifies

+0

他們爲什麼不工作?你可以在你的父控制器中獲得所有的checkbox,檢查它們是否是你正在改變的那個,如果不是,你可以改變它的值。稍後會更新答案。 –

+0

_是否有辦法用複選框來做?_當然,但並非毫不奇怪的用戶。所以這將是一個錯誤。您可以選擇複選框,並取消選中每個人,但發件人,但正如我所說:這將是非標準的行爲。 – TaW