我的Form1中有12个按钮,每个按钮旁边都有一个文本框。 button事件调用一个名为dialogOpen的方法,该方法处理从form2获取对象并将字符串值放置在文本框中的情况。

如何根据用户单击的按钮将返回的值放在文本框中?因此,如果是用户单击的是button1,则应将返回的文本放置在textbox1中;如果是用户单击的是button2,则应将返回的文本放置在textbox2中。重点是避免使用字符串名称进行检查,因为所有按钮都可以称为“浏览”。

现在我下面的代码可以做到这一点,但它是重复性的,这样做有更好的选择吗?

    private void dailogueOpen(String btnName)
    {
        if (listBox1.SelectedItem == null)
        {
            MessageBox.Show("Please Select a form");
        }
        else
        {
            var selectedItem = (FormItems)listBox1.SelectedItem;
            var form2result = new Form2(myDataSet, selectedItem);
            var resulOfForm2 = form2result.ShowDialog();

            if (resulOfForm2 == DialogResult.OK)
            {
                switch (btnName)
                {
                    case "btn1":
                        textBox1.Text = form2result.getValue();
                        break;
                    case "btn2":
                        textBox2.Text = form2result.getValue();
                        break;
                    case "btn3":
                        textBox3.Text = form2result.getValue();
                        break;
                    case "btn4":
                        textBox4.Text = form2result.getValue();
                        break;
                    case "btn5":
                        textBox5.Text = form2result.getValue();
                        break;
                }
            }
        }
    }


    private void button1_Click(object sender, EventArgs e)
    {
        String name = "btn1";
        dailogueOpen(name);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        String name = "btn2";
        dailogueOpen(name);
    }

    private void button3_Click(object sender, EventArgs e)
    {
        String name = "btn3";
        dailogueOpen(name);
    }

    private void button4_Click(object sender, EventArgs e)
    {
        String name = "btn4";
        dailogueOpen(name);
    }

    private void button5_Click(object sender, EventArgs e)
    {
        String name = "btn5";
        dailogueOpen(name);
    }

最佳答案

编辑:我只是注意到您的事件处理程序。随之而来的是更多的重构:

就在这里。您需要以某种方式将文本框关联到按钮。例如,创建一个像这样的字典:

Dictionary<Button, TextBox> _dict;

_dict[button1] = textBox1;
_dict[button2] = textBox2;
...


对所有事件使用一个事件处理程序:

private void button_click(object sender, EventArgs e)
{
    dialogeOpen((Button)sender);
}


更改dialogueOpen以接受Button而不是字符串,并

 _dict[btn].Text = form2Result.getValue();

关于c# - 我如何重构下面的C#代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12495140/

10-13 09:39