当文本框中包含文本时,自动选中复选框

时间:2014-10-12 12:26:30

标签: c# checkbox 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

我想念一下吗?

3 个答案:

答案 0 :(得分:2)

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

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

将这些行添加到构造函数中,这样您只能为每个控件订阅一次事件。

参数sa是"发件人"和" 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...
    }

    ...
}

答案 1 :(得分: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);
}

答案 2 :(得分:0)

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

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


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