2014-10-12 140 views
1

我想在文本框中的文本更改時調用一個函數。該功能只是檢查文本框是否包含任何文本,如果是,它會將複選框標記爲選中狀態。我有多個文本框和複選框要做到這一點的,所以我想,我可以每次我需要這個做當文本框中有文本時自動檢查複選框

private void autoCheckChkBoxes(CheckBox theChkBox, TextBox theTxtBox) 
    { 
     if (theTxtBox.Text != "") 
     { 
      theChkBox.Checked = true; 
     } 
     else 
     { 
      theChkBox.Checked = false; 
     } 
    } 

我然後調用在設計佈線的功能到TextChanged事件的功能複選框

this.txtBox.TextChanged += new System.EventHandler(this.autoCheckChkBoxes(thecheckbox, txtBox)); 

但是這給了我下面的錯誤,這是我之前沒有見過的:

Method name expected 

我是否錯過了什麼?

回答

2

您可以訂閱TextChanged事件並調用你的方法在一行是這樣的:

textBox1.TextChanged += (s,a) => autoCheckChkBoxes(thecheckbox, textBox1); 
textBox2.TextChanged += (s,a) => autoCheckChkBoxes(theNextCheckbox, textBox2); 
// etc... 

這些行添加到您的構造函數,因此您只爲每個控件訂閱一次事件。

參數sa是您通常在事件處理程序方法中看到的「sender」和「eventArgs」參數。其實你可以投的「發件人」正確TextBox,但它不保存你在這裏多...

textBox1.TextChanged += (sndr,args) => autoCheckChkBoxes(thecheckbox, (TextBox)sndr); 
textBox2.TextChanged += (sndr,args) => autoCheckChkBoxes(theNextCheckbox, (TextBox)sndr); 

當我說的地方是在構造函數中,我的意思的構造你的Form,而不是InitializeComponent()方法中:

public class YourForm : Form 
{ 
    public YourForm() 
    { 
     InitializeComponent(); 

     textBox1.TextChanged += (s,a) => autoCheckChkBoxes(thecheckbox, textBox1); 
     textBox2.TextChanged += (s,a) => autoCheckChkBoxes(theNextCheckbox, textBox2); 
     // etc... 
    } 

    ... 
} 
+0

這很好。我不想浪費你的時間,但只是爲了知道,'(s,a)=>'是什麼意思? – 2014-10-12 12:42:07

+0

我想我最好解釋一下。 :)更新了答案。 – 2014-10-12 12:42:55

+0

太棒了!儘管這樣做有效,但我的設計人員給了我一個例外消息: '設計人員無法在第463行處理代碼:this.txtBox.TextChanged + =(s,a)=> autoCheckChkBoxes(theChkBox,txtBox);方法'InitializeComponent'中的代碼由設計者生成,不應該手動修改。請刪除任何更改,並嘗試再次打開設計師。「它仍然有效,但..我應該只是按忽略並繼續? – 2014-10-12 13:34:34

0

創建事件處理程序,並在那,調用函數

this.txtBox.TextChanged += new System.EventHandler(this.textBox1_Textchanged); 


private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
     autochecBoxes(thechckbox, txtbox); 
} 
+0

不是我喜歡的,因爲我身邊有20個地方發生這種情況,這不會看起來那麼好 – 2014-10-12 12:36:05

+0

如果是這樣,豈不是更好地延長'TextBox',加'CheckBox'作爲好友並覆蓋'文本已更改'處理程序? – elimad 2014-10-12 12:41:14

1

autoCheckChkBoxes方法是不是有效的事件處理程序。事件處理程序的簽名是

void (object sender, EventArgs e) 

例子:

this.txtBox.TextChanged += txtBox_TextChanged; 

private void txtBox_TextChanged(object sender, EventArgs e) 
{ 
    thecheckbox.Checked = !String.IsNullOrEmpty(txtBox.Text); 
} 
相關問題