对象发送方作为验证当前文本框的参数

pan*_*njo 3 .net c# winforms

我想完成Winforms验证模式,例如检查文本框中的空字符串.所以,如果我有文本框命名txtBox1和事件处理程序txtBox1_Validated.我想知道是否可以使用object sender当前文本框属性的标识符?

例如,我有工作解决方案,我将Text当前文本框的属性作为参数发送到这样的ValidateTextBox方法

private void txtBox1_Validated(object sender, EventArgs e)
{
    bool isEmpty = ValidateTextBox(txtBox1.Text);
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以在上面的方法中使用对象发送器来替换txtBox1.Text参数?

谢谢

Jon*_*eet 10

假设你已经附加txtBox1_Validated到适当的控件,绝对:

TextBox textBox = (TextBox) sender;
bool isEmpty = ValidateTextBox(textBox.Text);
Run Code Online (Sandbox Code Playgroud)

这意味着您可以为多个控件共享相同的方法.

编辑:由于其他两个答案(在撰写本文时)使用as而不是演员,让我解释为什么我非常刻意使用演员.

你将自己联系事件处理程序.你知道sender一定是TextBox-如果不是,那表示你的代码中的错误.有了演员阵容,你会发现这个bug.使用as,它将被默默地忽略 - 你很可能永远不会修复这个bug.


Van*_*dze 5

当然可以:

private void txtBox1_Validated(object sender, EventArgs e)
{
    TextBox txt = sender as TextBox;
    if(txt != null)
    {
       bool isEmpty = ValidateTextBox(txt.Text);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

实际上,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);
}
Run Code Online (Sandbox Code Playgroud)

  • 你是对的。那是错误。但是使用*as*,您可以安全地处理它。 (2认同)