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