对象sender作为验证当前文本框的参数
本文关键字:文本 参数 sender 验证 对象 | 更新日期: 2023-09-27 18:25:28
我想完成Winforms验证模式,例如检查文本框中的空字符串。因此,如果我有一个名为txtBox1
的文本框和事件处理程序txtBox1_Validated
。我想知道是否可以使用object sender
作为当前文本框属性的标识符?
例如,我有一个有效的解决方案,我将当前文本框的Text
属性作为参数发送给像这样的ValidateTextBox
方法
private void txtBox1_Validated(object sender, EventArgs e)
{
bool isEmpty = ValidateTextBox(txtBox1.Text);
...
}
我想知道是否可以使用上述方法中的对象发送器来替换txtBox1.Text
参数?
感谢
假设您已将txtBox1_Validated
附加到适当的控件,则绝对:
TextBox textBox = (TextBox) sender;
bool isEmpty = ValidateTextBox(textBox.Text);
这意味着您当然可以为多个控件共享相同的方法。
编辑:由于其他两个答案(在撰写本文时)使用了as
而不是演员阵容,让我解释一下为什么我非常刻意地使用演员阵容。
您将自己连接事件处理程序。您知道sender
必须是TextBox
——如果不是,则表明代码中存在错误。有了演员阵容,你就会发现那个bug。使用as
,它将被忽略,而且很可能永远不会修复这个错误。
当然可以:
private void txtBox1_Validated(object sender, EventArgs e)
{
TextBox txt = sender as TextBox;
if(txt != null)
{
bool isEmpty = ValidateTextBox(txt.Text);
}
}
编辑:
实际上,if(txt!=null)是if Ok反模式
这会更好:
private void txtBox1_Validated(object sender, EventArgs e)
{
TextBox txt = sender as TextBox;
if(txt == null)
{
// Handler error
}
bool isEmpty = ValidateTextBox(txt.Text);
}
您可以将sender
参数强制转换为正确对象的实例。
例如
private void txtBox1_Validated(object sender, EventArgs e)
{
var myTextbox = sender as TextBox;
if (myTextbox != null)
{
bool isEmpty = ValidateTextBox(myTextbox.Text);
}
}
是的,可以编写类似的东西
private void txtBox1_Validated(object sender, EventArgs e)
{
bool isEmpty = ValidateTextBox(((TexBox)sender).Text);
}
但为什么不使用Validator控件呢?
TextBox myObj = sender as TextBox;
if(myObj != null)
{
// TODO
}
private void button_Click(object sender, EventArgs e)
{
if ((sender == (object)button1))
}