我想在文本框中更改文本时调用函数。该函数只检查文本框是否包含任何文本,如果是,则将复选框标记为已选中。我有多个文本框和复选框来执行此操作,因此我想要一个我可以在每次需要完成时调用的函数
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
我想念一下吗?
答案 0 :(得分:2)
您可以订阅TextChanged
事件并在一行中调用您的方法,如下所示:
textBox1.TextChanged += (s,a) => autoCheckChkBoxes(thecheckbox, textBox1);
textBox2.TextChanged += (s,a) => autoCheckChkBoxes(theNextCheckbox, textBox2);
// etc...
将这些行添加到构造函数中,这样您只能为每个控件订阅一次事件。
参数s
和a
是"发件人"和" 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);
}