3

我一直在努力使我正在工作的项目更具可读性,因为 UI 类看起来很乱。我面临的新问题是 StatusStrip、MenuStrip 和 ToolStrip 控件。

由于每个按钮都需要执行不同的操作,因此目前使用 switch 语句进行控制,这里有一个示例:

switch (e.ClickedItem.Text.ToLower())
{
    case "find":
        {
            Find find = new Find(customTextBox1);
            find.Show();
            break;
        }
    case "undo":
        {
            customTextBox1.Undo();
            break;
        }
    case "redo":
        {
            customTextBox1.Redo();
            break;
        }
    case "cut":
        {
            customTextBox1.Cut();
            break;
        }
    case "copy":
        {
            customTextBox1.Copy();
            break;
        }
    case "paste":
        {
            customTextBox1.Paste();
            break;
        }
    case "delete":
        {
            customTextBox1.SelectedText = "";
            break;
        }
    case "refresh":
        {
            RefreshData();
            break;
        }
    case "select all":
        {
            customTextBox1.SelectAll();
            break;
        }
}

上面的代码只针对一项,所以想象一下其中有 20 个,每个有 5-10 个子项。

如您所见,我已经清理了案例方法,现在它们中的大多数都是单行的,但仍然有这么多的子项,感觉它应该是一种更好的方法。所以理想情况下,我正在寻找一种新的/更好的方法来处理这个问题。

提前致谢。

4

1 回答 1

3

您可以使用以下代码,但您必须确保字符串与函数名称完全相同

switch (e.ClickedItem.Text.ToLower())
{
    case "find":
        Find find = new Find(customTextBox1);
        find.Show();
        break;
    case "undo": case "redo": case "cut": case "copy": case "paste": case "select all":
        Type thisType = customTextBox1.GetType();
        MethodInfo theMethod = thisType.GetMethod(e.ClickedItem.Text.ToLower());
        theMethod.Invoke(customTextBox1, userParameters);
        break;
    case "delete":
        customTextBox1.SelectedText = "";
        break;
    case "refresh":
        RefreshData();
        break;
}
于 2012-07-28T06:48:35.647 回答