C# 文本框中包含文本时自动选中复选框

C# 文本框中包含文本时自动选中复选框,c#,checkbox,textbox,C#,Checkbox,Textbox,当文本框中的文本发生变化时,我想调用一个函数。该函数只检查textbox是否包含任何文本,如果包含,则将复选框标记为选中。我有多个文本框和复选框来做这件事,因此我想要一个函数,我可以调用每次我需要这样做 private void autoCheckChkBoxes(CheckBox theChkBox, TextBox theTxtBox) { if (theTxtBox.Text != "") { theChkBox.Ch

当文本框中的文本发生变化时,我想调用一个函数。该函数只检查textbox是否包含任何文本,如果包含,则将复选框标记为选中。我有多个文本框和复选框来做这件事,因此我想要一个函数,我可以调用每次我需要这样做

    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

我遗漏了什么吗?

创建EventHandler,并在其中调用您的函数

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


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

autocheckchbox
方法不是有效的事件处理程序。事件处理程序签名为

void (object sender, EventArgs e)
例如:

this.txtBox.TextChanged += txtBox_TextChanged;

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

您可以订阅
TextChanged
事件,并在一行中调用您的方法,如下所示:

textBox1.TextChanged += (s,a) => autoCheckChkBoxes(thecheckbox, textBox1);
textBox2.TextChanged += (s,a) => autoCheckChkBoxes(theNextCheckbox, textBox2);
// etc...
将这些行添加到构造函数中,以便每个控件只订阅一次事件

参数
s
a
是您通常在事件处理程序方法中看到的“sender”和“eventArgs”参数。实际上,您可以将“发件人”强制转换为正确的
文本框
,但这并不能为您节省太多时间

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

当我说将其放置在构造函数中时,我指的是
表单的构造函数,而不是
InitializeComponent()
方法中的构造函数:

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

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

    ...
}

这不是我喜欢的,因为我有大约20个地方应该发生这种情况,如果是这样的话,那么扩展
文本框
,添加
复选框
作为好友并覆盖
文本更改
处理程序不是更好吗?这非常有效。我不想浪费你的时间,只是为了知道,
(s,a)=>
是什么意思?太好了!尽管这样做有效,但我的设计器给了我一个例外消息:
设计器无法处理第463行的代码:this.txtBox.TextChanged+=(s,a)=>autocheckchbox(theChkBox,txtBox);“InitializeComponent”方法中的代码由设计器生成,不应手动修改。请删除所有更改,然后再次尝试打开设计器。
但它仍然有效。。我应该只按ignore并继续吗?不要将其放在
InitializeComponent()
方法中(这会被覆盖,您将丢失更改)。相反,在调用
InitializeComponent()
之后,立即将上述代码放入
表单的构造函数中(假设这是WinForms)。