2016-02-20 20 views
0

我在羣組中有一堆複選框。我想這樣做,當一個被檢查,所有其他人都被禁用。我將checkchanged事件中的以下代碼應用於groupbox中的所有複選框,這些都是我上面想要的,但是,當您取消選中該複選框時,我想將其取消。我該怎麼做?Visual Studio C# - Reverse!啓用foreach如果未選中複選框?

foreach (CheckBox chk in this.grpBreadType.Controls) 
{ 
    if (!chk.Checked) 
    { 
     chk.Enabled = false; 
    } 

圖片

When you check a box

When you uncheck that box :(

+0

這就是所謂的組合框...或一組單選按鈕 – Plutonix

+1

在這裏不是單選按鈕服務器的更好的目的。它們在同一父母中是相互排斥的。 –

+0

如果你在談論一組複選框需要被禁用或基於另一個複選框啓用,那麼你可以把它們放在一個面板內,並根據第一個複選框啓用/禁用面板。 –

回答

0

像這樣的東西可以做你想要什麼。

private void chkBox_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox tmp = (CheckBox)sender; 
     bool tmpStatus = tmp.Checked; 
     foreach (CheckBox chk in this.Controls.OfType<CheckBox>()) 
     { 
      if (tmp.Checked) 
      { 
       chk.Enabled = false; 
       tmp.Enabled = tmpStatus; 
      } 
      else 
      { 
       chk.Enabled = true; 
       tmp.Enabled = true; 
      } 
     } 
    } 

您會將您所有複選框的CheckChanged事件指向此子。也許可以使用一些重構。

+0

我試過但沒有任何反應。我在if語句中插入了一個斷點,並在檢查框時檢測不到它。我確實指出了我的複選框的CheckChanged事件。 –

+0

你是否已將所有複選框的checkchanged事件指向此例程。 (即,勾選包含的複選框,單擊屬性窗口中的事件圖標,向下滾動以檢查已更改,在下拉列表中選擇此子項。 –

+0

我在新窗體上嘗試了您的代碼塊,並且它似乎與所有複選框都被禁用了我試圖弄清楚爲什麼它不適用於我的實際項目 - 看起來它不適用於組框但是不適用於表單... –

相關問題