我有3个文本框(但在实际情况下,有3个以上的文本框),每个文本框都连接到下面的单个事件处理程序。

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    TextBox tb = sender as TextBox;
    if (e.KeyChar == (char)Keys.Enter)
    {
        if (tb.Equals(textBox1)) textBox2.Focus();
        if (tb.Equals(textBox2)) textBox3.Focus();
        if (tb.Equals(textBox3)) button1.Focus();
    }
}


当用户按Enter键时,焦点将移至下一个文本框。我想避免在使用switch时使用硬编码的字符串常量,因此如上所述,我被迫使用if

我的问题是:是否有可能使用switch但不使用硬编码字符串常量?

编辑

我不想写如下内容,因为我讨厌硬编码的常量值。

switch (tb.Name)
{
    case "textboxnameone":
        textBox2.Focus();
        break;
    case "textboxnametwo":
        textBox3.Focus();
        break;
    case "textboxnamethree":
        button1.Focus();
        break;
}

最佳答案

在这里看看:
TabIndex changed to Enter for all forms in C#
How to send focus to control with tabindex lower than current control in C# windows form application?

您可以使用该解决方案和TabIndex以更简洁的方式完成此行为。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.tabindex(v=vs.110).aspx

关于c# - 我们可以将以下if语句转换为单个开关吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21534888/

10-13 06:21