【问题标题】:How can I append some string to function name.如何将一些字符串附加到函数名称。
【发布时间】:2015-12-23 01:09:12
【问题描述】:

我有一个 for 循环,每次都会调用 click 事件。我想在函数名后面附加一些字符串。 比如说,button_click 然后我希望它是 Button_click1、Button_click2 等。

我想对值 1、2 等执行一些操作。 请建议是否有任何其他方式可以访问此信息。

线程可能是我会选择的最后一个选项。

【问题讨论】:

  • 在实际运行代码时(大部分情况下),方法名称无关紧要。你想做什么?
  • 您是否尝试在同一个对象上调用多个方法,其中每个方法名称都相同,除了您计划从 for 循环索引中检索的数字后缀?

标签: c# click string-concatenation


【解决方案1】:

其他答案对我来说更正确,但是如果您真的需要基于字符串的调用,我认为您需要使用反射类。

String suffix = "_Click1";
Type myType = typeof(MyClass);
myType.InvokeMember("Button"+ suffix, 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, yourButtonObject, null);

【讨论】:

    【解决方案2】:

    我认为你应该像这样将所有按钮放在一个列表中:

    List<Button> ButtonList = new List<Button>(){Button1, Button2};
    

    然后为每个按钮调用 Button_Click,如下所示:

    Foreach(Button button in ButtonList)
        button.Button_Click(this, new EventArgs());
    

    【讨论】:

      【解决方案3】:

      您可以尝试在其中创建一个 Button 数组,然后您可以为单击数组中的任何按钮创建一个事件。

      然后,您可以使用 for 循环来关闭包含当前索引的变量:

      for(int i = 0; i < buttons.Length; i++)
      {
          //it's important to have this; closing over the loop variable would be bad
          int index = i;  
          buttons[i].Click += (sender, args) => SomeMethod(buttons[index], index);
      }
      

      这可能会节省很多代码行并且更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 2021-03-23
        • 1970-01-01
        • 2012-05-27
        • 2016-05-01
        • 1970-01-01
        • 2020-11-16
        相关资源
        最近更新 更多