如何缩短c#

时间:2016-09-05 02:37:13

标签: c# c#-4.0 c#-3.0

有人可以缩短此代码吗? 有14个按钮和8个文本框。如果文本框不为空且如果它不为空,则将执行该操作,然后当您单击它时,将再次显示与文本框中的字母对应的按钮,使文本框为空。

 private void txt1_Click(object sender, EventArgs e)
 {
        if (txt1.Text == "J")
        {
            txt1.Text = "";
            btn1.Visible = true;
        }
        else if (txt1.Text == "M")
        {
            txt1.Text = "";
            btn2.Visible = true;
        }
        else if (txt1.Text == "Y")
        {
            txt1.Text = "";
            btn3.Visible = true;
        }
        else if (txt1.Text == "E")
        {
            if (btn4.Visible == true)
            {
                txt1.Text = "";
                btn5.Visible = true;
            }
            else
            {
                txt1.Text = "";
                btn4.Visible = true;
            }
        }
        else if (txt1.Text == "Q")
        {
            txt1.Text = "";
            btn6.Visible = true;
        }
        else if (txt1.Text == "L")
        {
            if (btn7.Visible == true)
            {
                txt1.Text = "";
                btn10.Visible = true;
            }
            else
            {
                txt1.Text = "";
                btn7.Visible = true;
            }
        }
        else if (txt1.Text == "B")
        {
            txt1.Text = "";
            btn8.Visible = true;
        }
        else if (txt1.Text == "C")
        {
            txt1.Text = "";
            btn9.Visible = true;
        }
        else if (txt1.Text == "P")
        {
            txt1.Text = "";
            btn11.Visible = true;
        }
        else if (txt1.Text == "I")
        {
            txt1.Text = "";
            btn12.Visible = true;
        }
        else if (txt1.Text == "K")
        {
            txt1.Text = "";
            btn13.Visible = true;
        }
        else if (txt1.Text == "O")
        {
            txt1.Text = "";
            btn14.Visible = true;
        }
}

3 个答案:

答案 0 :(得分:4)

假设所有btn变量都是您班级状态的一部分,那么您可以声明一个类似的方法:

public Button Click(String txt) {
    switch(txt) {
        case "J":
            return btn1;
        case "M":
            return btn2;
        case "Y":
            return btn3;
        case "E":
            return (btn4.Visible ? btn5 : btn4);
        case "Q":
            return btn6;
        case "L":
            return (btn7.Visible ? btn10 : btn7);
        case "B":
            return btn8;
        case "C":
            return btn9;
        case "P":
            return btn11;
        case "I":
            return btn12;
        case "K":
            return btn13;
        case "O":
            return btn14;
    }
    return null;
}

然后你称之为:

var button = Click(txt1.Text);
if(button != null) {
    button.Visible = true;
    txt1.Text = "";
}

但是,如果btn变量具有局部范围,则可以将其定义为内联Func<String,Button>委托,而不是方法:

Func<String, Button> Click = txt => {
    switch(txt) {
        ...
    }
};

答案 1 :(得分:1)

您仍然需要处理特殊情况(driver.find_element_by_css_selector("table.GHN3134DJ5I input.loginTextBox.loginTextBox-watermark.loginTextBox-hightlight[type='text']") "E"),但您可以使用"L"来进行查找:

Dictionary<string, Button>

这会减少大部分重复代码。

答案 2 :(得分:0)

看着这个:我建议你回想一下更合乎逻辑的方式去做你正在做的事情。

根据我的经验,代码中if-else的任何巨大链表示某处存在逻辑问题。

另外,请熟悉切换语句