我一直在尝试使项目我的工作更具可读性,因为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个子项目。
我已经清理了案例方法,你可以看到,现在大多数都是单行,但仍然有这么多的子项,感觉它应该是一个更好的方法。理想情况下,我正在寻找一种新的/更好的方法来解决这个问题。
提前致谢。
答案 0 :(得分: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;
}