代码之家  ›  专栏  ›  技术社区  ›  Jimenemex

按名称属性比较文本框控件

  •  1
  • Jimenemex  · 技术社区  · 6 年前

    我有一个 KeyPress 事件绑定到多个 TextBox S和我想检查一下 文本框 是被点击,并根据点击的不同做不同的事情。

    我想比较一下 文本框 正在根据 .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;
        }
    }
    

    有办法解决这个问题吗?我不想硬编码 名字 作为一个 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 像这样的价值观。

    我怎么比较 文本框 有一个 按键 无需硬编码 名字 作为一根绳子 case 声明?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Iqon    6 年前

    你不能用 switch 像那样。这个 case s需要是编译时常量。

    你可以这样做:

    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 ES或 文本框 的名字。

    所以你可以改变 UpdateValues 合而为一 UpdateUserName UpdatedPasswort . 这样,方法名将清楚地显示方法的作用(或者至少应该做什么),使代码更具可读性。

        2
  •  1
  •   Kenneth Garza    6 年前

    试试这个

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