如何动态分配方法组合框

时间:2016-11-01 09:17:53

标签: c#

我想根据组合框的选定值执行几种方法。 我目前正在使用以下代码:

switch (comboBox1.SelectedIndex)
{
    case 1:
        // call method1
        break;
    case 2:
        // call method2
        break;
}

是否有一种很好的方法可以获得相同的功能,例如combobox.selectedIndex == 1然后自动调用方法1?

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用代理人:

private readonly Dictionary<int, Action> actions = new Dictionary<int, Action>
  {
    { 1, Method1 },
    { 2, Method2 },
    { 3, Method3 },
  };

允许你做这样的事情:

actions[comboBox.SelectedIndex]();

当然,您也可以使用反射,但保持静态链接有很多好处:)

答案 1 :(得分:0)

使用反思

    public int Method0()
    {
        MessageBox.Show("method0");
        return 0;
    }

    public int Method1()
    {
        MessageBox.Show("method1");
        return 1;
    }

    public int Method2()
    {
        MessageBox.Show("method2");
        return 2;
    }



    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox comboBox = (ComboBox)sender;

        System.Reflection.MethodInfo tmp = this.GetType().GetMethod("Method" + comboBox.SelectedIndex.ToString());

        if (tmp==null)
        {
            MessageBox.Show("method named '" + "Method" + comboBox.SelectedIndex.ToString() + "' dont exist");
        }
        else
        {
            int result=(int)tmp.Invoke(this, null);
        }


    }