我有一个绑定在多个KeyPress
上的TextBox
事件,我想检查哪个TextBox
被点击了,并根据点击的内容来做不同的事情。
我正在尝试根据文本框的TextBox
属性比较点击哪个.Name
。我正在switch语句中执行此操作,但是得到a Constant value is expected
。
private void UpdateValues(object sender, KeyPressEventArgs e)
{
TextBox textBox = (TextBox)sender;
switch (textBox.Name)
{
case txtBox1.Name: // Error here
break;
}
}
有没有办法解决这个问题?我不想将.Name
硬编码为string
,以防将来的开发人员从事此工作。
我可以这样做,还是会成为运行时错误?
private const string _TXTBOX1NAME = txtBox1.Name;
private void UpdateValues(object sender, KeyPressEventArgs e)
{
TextBox textBox = (TextBox)sender;
switch (textBox.Name)
{
case _TXTBOX1NAME: // Use the const variable
break;
}
}
编辑:
实际上,您不能像这样分配const
值。
在不TextBox
语句中将KeyPress
硬编码为字符串的情况下,如何比较哪个.Name
有一个case
?
答案 0 :(得分:2)
您不能像这样使用switch
。 case
必须是编译时常量。
您可以这样做:
private void UpdateValues(object sender, KeyPressEventArgs e)
{
TextBox textBox = (TextBox)sender;
switch (textBox.Name)
{
case "NameTextBox":
break;
case "PasswordTextBox":
break;
}
}
如果您知道名称,则可以。您的示例失败了,因为textbox1.Name
不是常数,而是从一个TextBox
的实例读取的属性。
另一种方法是使用作为发件人指定的文本框引用:
private void UpdateValues(object sender, KeyPressEventArgs e)
{
TextBox textBox = (TextBox)sender;
if(textBox == textBox1) { ... }
if(textBox == textBox2) { ... }
}
但是恕我直言,最好的解决方案是使用两个变更回调,每种方法一个。然后,您无需比较textbox
或textbox
的名称。
因此您可以将UpdateValues
更改为一个UpdateUserName
和UpdatedPasswort
。这样做,方法名称将清楚地显示出该方法的作用(或至少应该做),从而使您的代码更具可读性。
答案 1 :(得分:1)
尝试
private void UpdateValues(object sender, KeyPressEventArgs e)
{
TextBox textBox = (TextBox)sender;
if (textBox.Name == textBox1.Name){
//error
} else if(textBox.Name == textBox2.Name){
// and so on
}
}