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

时间:2013-07-29 19:37:33

标签: c# .net winforms

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

例如,我有一个工作解决方案,我将当前文本框的Text属性作为ValidateTextBox方法的参数发送,如下所示

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

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

由于

6 个答案:

答案 0 :(得分:10)

假设您已将txtBox1_Validated附加到相应的控件,绝对是:

TextBox textBox = (TextBox) sender;
bool isEmpty = ValidateTextBox(textBox.Text);

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

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

您将自己连接事件处理程序。您知道 sender必须是TextBox - 如果不是,则表示您的代码中存在错误。有了演员阵容,你会发现这个bug。使用as静默将被忽略 - 您很可能永远无法修复该错误。

答案 1 :(得分:4)

当然你可以:

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);
}

答案 2 :(得分:1)

您可以将sender参数强制转换为正确对象的实例。

E.g。

private void txtBox1_Validated(object sender, EventArgs e)
{
    var myTextbox = sender as TextBox;
    if (myTextbox != null) 
    {
        bool isEmpty = ValidateTextBox(myTextbox.Text);
    }
}

答案 3 :(得分:1)

是的,可以编写类似

的内容
private void txtBox1_Validated(object sender, EventArgs e)
{
    bool isEmpty = ValidateTextBox(((TexBox)sender).Text);
}

但为什么不使用Validator控件?

答案 4 :(得分:0)

Sender变量是触发事件的对象。您需要强制转换对象以访问其属性:

TextBox myObj = sender as TextBox;
if(myObj != null) 
{
 // TODO
}

答案 5 :(得分:0)

 private void button_Click(object sender, EventArgs e)
 {
       if ((sender == (object)button1))
 }