将方法传递给表单以供以后调用

时间:2016-12-27 17:30:18

标签: c# events delegates event-handling

所以我对如何将具有特定签名的方法传递给表单时感到困惑,然后该表单可以使用自己的参数调用所述方法并评估返回值。 问题是,我读的关于委托,事件,事件处理程序,订阅以及Func和Actions的内容越多,我就越困惑。 (我已经尝试了很多,修改了很多,没有工作,但我想那是因为我不知道它们是如何工作的) 我想做的例子:

public class WorkingStatic {

    public static SetUpForm() {
        SomeForm tmp_Form = new SomeForm(StaticMethod);
        /*somehow pass the method to the form so that it can invoke it*/
        tmp_Form.Show();
    }

    public static int StaticMethod(int p_Int) {
        // do whatever..
        return p_Int;
    }

}

这只是一个带有某个方法的类,重要的是该方法将int作为参数并返回一个int。

现在我希望Form能够正常运行..因此代码无效:

public partial class SomeForm : Form {

    private Method m_Method;

    public SomeForm(/*here I pass a method*/Method p_Method) {
        InitializeComponent();
        m_Method = p_Method;
    }

    public void SomeMethodThatGetsCalledByAButton() {
        m_Method.Invoke(/*params*/ 1); /*would return 1*/
    }

}

这些都没有“令人惊讶”,因为我对此感到沮丧,我以为我会问你们。

提前致谢!

-RmOL

1 个答案:

答案 0 :(得分:0)

由于我标记的答案已删除,我将发布对我有用的内容。 感谢@Fabio提供解决方案。 (作为评论)

public class WorkingStatic { public static SetUpForm() { SomeForm tmp_Form = new SomeForm(Func<int, int>(StaticMethod)); /*pass the method to the form so that it can invoke it*/ tmp_Form.Show(); } public static int StaticMethod(int p_Int) { // do whatever.. return p_Int; } } public partial class SomeForm : Form { private Func<int, int> m_Method; public SomeForm(Func<int, int> p_Method) { InitializeComponent(); m_Method = p_Method; } public void SomeMethodThatGetsCalledByAButton() { m_Method(/*params*/ 1); /*would return 1*/ } }

可以像任何其他类型一样处理。 (当传递方法时,不要在其后放置关于该方法的普通括号或任何其他参数)

问题中显示的示例如下所示:

{{1}}