2014-10-12 89 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); 
} 
相关问题