我有一个包含tabpage集合名称的枚举器。我想使用tabControl.SelectedIndexChanged
事件来根据标签页的标题/名称执行特定代码。
是否可以使用如下的开关语句:
private void tabControl2_SelectedIndexChanged(object sender, EventArgs e)
{
var tc = (TabControl)sender;
switch (tc.SelectedTab.Name)
{
case Enum.GetName(typeof(tabPages), 0):
// This is table page 0 , name="interchanges"
// set default values
break;
case Enum.GetName(typeof(tabPages), 1):
// Do something else page=1,name="ShowContents"
break;
}
}
答案 0 :(得分:2)
您应该将字符串转换为枚举。然后切换它。 例如:
tabPages tab = (tabPages)Enum.Parse(typeof(tabPages),tc.SelectedTab.Name);
switch (tab)
{
case tabPages.interchanges:
// This is table page 0 , name="interchanges"
// set default values
break;
case tabPages.Showcontents:
// Do something else page=1,name="ShowContents"
break;
}
编辑:快速制作这个例子:
using System;
public class Test
{
public static void Main()
{
string text = "One";
TestEnum test = (TestEnum)Enum.Parse(typeof(TestEnum), text);
switch (test)
{
case TestEnum.One:
Console.WriteLine("ONE!");
break;
case TestEnum.Two:
Console.WriteLine("TWO!");
break;
case TestEnum.Three:
Console.WriteLine("THREE!");
break;
}
}
public enum TestEnum
{
One,
Two,
Three
}
}
答案 1 :(得分:0)
替代建议,虽然可能难以维持:
将代表附加到'标记'每个页面,并让您的代码只需调用该页面上的任何代表。您的代码变为:
var tc = (TabControl)sender;
Action action = tc.Tag as Action;
if (action != null)
action();
另一种可能性是定义静态Dictionary<string, Action> myActions
,并且只调用
myActions[tabName]();