2013-02-12 52 views
0

我有一個由複選框組成的用戶控件。我在窗體上有4個這些用戶控件。當用戶單擊用戶控件中的任何一個複選框時,我希望其他用戶控件確保它們未被檢查。類似於單選按鈕的工作方式,除了我需要使用複選框和事件。幾個用戶控件如何響應c#中其中一個控件發生的事件?

+3

爲什麼需要改用單選按鈕的複選框? – 2013-02-12 19:10:08

+0

@zespri - 一旦選擇(意外),您便無法取消選擇單選按鈕。某些用戶可能不想選擇任何選項。 – Win 2013-02-12 19:29:48

+0

這通常通過添加第5個單選按鈕「以上都不是」來解決 – 2013-02-12 19:33:49

回答

3

一個簡單的方法可以是使用單一方法的CheckBox ES的所有事件,並利用這種方式sender對象:

List<CheckBox> listCheckBoxes; 

checkBox1.CheckedChanged += new EventHandler(checkBox_CheckedChanged); 
checkBox2.CheckedChanged += new EventHandler(checkBox_CheckedChanged); 
checkBox3.CheckedChanged += new EventHandler(checkBox_CheckedChanged); 
checkBox4.CheckedChanged += new EventHandler(checkBox_CheckedChanged); 

listCheckBoxes = this.Controls.OfType<CheckBox>().ToList(); 

void checkBox_CheckedChanged(object sender, EventArgs e){ 
    CheckBox checkBox = (CheckBox)sender; 
    if(checkBox.Checked){ 
     foreach(CheckBox c in listCheckBoxes){ 
      if(c.Checked && c != checkBox) 
       c.Checked = false; 
     } 
    } 
} 
1

事件處理程序通常是表單(或自定義容器)的一種方法。您通常知道該級別的其他控件。如果您試圖在自定義控件上執行該事件處理程序,則會遇到問題,因爲您會將控件綁定到其他控件。

這將是一個更好的設計,有一些容器控件,有一個事件處理程序來執行此邏輯。該事件處理程序將被添加到每個複選框的Click事件中。

1

總結控件在一個UserControl。當一個事件觸發一個CheckBox控件時,會爲其餘的CheckBox控件引發一般切換事件。

0

OK ,如果我假設是正確的。你有一個表單中的4個用戶控件,並且他們需要在某些事件中相互通信(在你的情況下,它是由用戶控件之一中的複選框引起的事件)

我會實現訂閱者/發佈者模型。
在UsercontrolA(發佈者) 1)在複選框,單擊提升一個事件,如果需要,將其轉發給轉發給一個共同的事件功能

其中包含了用戶控件

Page類,將訂閱UsercontrolA的事件,用戶控件B(用戶)

有關詳細信息,請參閱本 http://www.codeproject.com/Articles/15550/How-to-invoke-events-across-User-Controls-in-ASP-N

相關問題