2016-01-12 140 views
1

使用C#,我想創建兩個複選框之間的關係: 1. chk_PeelTrace和2 chk_MoveTrace, 只有一個複選框,可以同時進行檢查,因此,如果PeelTrace開始爲真,我檢查MoveTrace,然後MoveTrace應該被檢查,而PeelTrace應該被取消選中。切換C#複選框

但是,重要的是,它們應該可以同時取消選中。我嘗試了許多不同的東西;下面的示例中會列出其中一些替代方法。

無論我嘗試什麼,我都無法正常工作。我一直在遇到一個System.StackOverflowException但不知道爲什麼。任何想法或建議如何做到這一點?

private void chk_PeelTrace_CheckedChanged(object sender, EventArgs e) 
    { 
     ////if (tracePeel) 
     //if (chk_PeelTrace.CheckState.Equals(CheckState.Checked)) 
     if (chk_PeelTrace.Checked) 
     { 
      ////tracePeel = false; 
      //chk_PeelTrace.CheckState = CheckState.Unchecked; 
      chk_PeelTrace.Checked = !chk_PeelTrace.Checked; 
      ////traceMove = false; 
      //chk_MoveTrace.CheckState = CheckState.Unchecked; 
      chk_MoveTrace.Checked = false; 
     } 
     else 
     { 
      ////traceMove = false; 
      //chk_MoveTrace.CheckState = CheckState.Unchecked; 
      chk_MoveTrace.Checked = false; 
      ////tracePeel = true; 
      //chk_PeelTrace.CheckState = CheckState.Checked; 
      chk_PeelTrace.Checked = true;  
     } 
    } 

    private void chk_MoveTrace_CheckedChanged(object sender, EventArgs e) 
    { 
     //if (chk_MoveTrace.Checked == true) 
     ////if (traceMove) 
     //if (chk_MoveTrace.CheckState.Equals(CheckState.Checked)) 
     if (chk_MoveTrace.Checked) 
     { 
      ////traceMove = false; 
      //chk_MoveTrace.CheckState = CheckState.Unchecked; 
      chk_MoveTrace.Checked = !chk_MoveTrace.Checked; 
      ////tracePeel = false; 
      //chk_PeelTrace.CheckState = CheckState.Unchecked; 
      chk_PeelTrace.Checked = false; 
     } 
     else 
     { 
      ////tracePeel = false; 
      //chk_PeelTrace.CheckState = CheckState.Unchecked; 
      chk_PeelTrace.Checked = false; 
      ////traceMove = true; 
      //chk_MoveTrace.CheckState = CheckState.Checked; 
      chk_MoveTrace.Checked = true; 
     } 
    } 
+1

你說過; *一次只能激活一個複選框*。對於這種情況,使用單選按鈕而不是組框內的複選框。 – Irshad

回答

1

你快到了,只需添加一些標誌(布爾型字段)來禁止處理由其他處理程序代碼引起的事件。

private void chk_PeelTrace_CheckedChanged(object sender, EventArgs e) 
{ 
    if (handleChecked) 
    { 
     handleChecked=false; 
     // your handler code 
     handleChecked=true; 
    } 
} 

private void chk_MoveTrace_CheckedChanged(object sender, EventArgs e) 
{ 
    if (handleChecked) 
    { 
     handleChecked=false; 
     // your handler code 
     handleChecked=true; 
    } 
} 
+0

謝謝cyberj0g – Andres

0

,因爲我明白你想同時是假的問題,但兩者不能同時是真實的,因此,如何嘗試下面這個簡單的代碼:

private void chk_PeelTrace_CheckedChanged(object sender, EventArgs e) 
    { 
     if (chk_PeelTrace.Checked) 
     { 
      chk_MoveTrace.Checked = false; 
     } 
    } 

    private void chk_MoveTrace_CheckedChanged(object sender, EventArgs e) 
    { 
     if (chk_MoveTrace.Checked) 
     { 
      chk_PeelTrace.Checked = false; 
     } 
    } 

也是這個工作對我來說很好

+0

真棒謝謝你!這工作很好 – Andres

+0

@Andres:希望你不介意接受它作爲一個答案了。 – csharpcoder

+0

我做到了!我只是一個新用戶,所以它不會顯示它.. – Andres