我想完成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.
当然可以:
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)
| 归档时间: |
|
| 查看次数: |
9694 次 |
| 最近记录: |