我一直在尝试使我正在工作的项目更具可读性,因为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个子项目.
正如您所看到的,我已经清理了案例方法,现在它们大多数是单行的,但仍然有那么多子项目,只是感觉应该是一种更好的方法.因此,理想情况下,我正在寻找一种处理此问题的新方法.
提前致谢.
解决方法:
您可以使用以下代码,但是必须确保该字符串与函数名称完全相同
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;
}