如何从其父窗体设置userControl函数的操作?

时间:2012-03-18 02:42:25

标签: c# winforms function user-controls action

我有一个userControl函数,我想从父表单设置其操作。

我已经从该父窗体设置了userControl按钮操作。 它的工作原理如下:

Form1.cs中的

    public Form1()
    {
        InitializeComponent();
        fileManagerLocal1.SetSendButton(SendMethod);
    }
    private void SendMethod()
    {
        //whatever ...
    }
userControl1.cs中的

public void SetSendButton(Action action)
    {
        btnSend.Click += (s, e) => action();
    }

代码运行得很好。 但我需要的是如何设置一个功能动作..

Form1.cs中的

public Form1()
    {
        InitializeComponent();
        fileTransfer1.RefreshLocalFM(RefreshFM);
    }

 public void RefreshFM()
    {
        fileManagerLocal1.btnRefresh.PerformClick();
    }
在userControl1.cs中

 public void RefreshLocalFM(Action action)
    {
        action(); // what should be in here ?
    }
提前谢谢。 :)

2 个答案:

答案 0 :(得分:1)

我不清楚“设置功能动作”是什么意思。 您想在控制器的上下文中立即调用该函数吗?在这种情况下,您提供的代码是正确的。 另一方面,如果要将用户控件配置为在稍后的某些代码中使用提供的操作,则需要按如下方式存储该操作

userControl1中的

Action externalFunction = null;
public void RefreshLocalFM(Action action)
    {
        externalFunction = action;
    }

// later code
private void someMethod()
{
   externalFunction();
}

我希望我理解正确。

答案 1 :(得分:1)

我已经找到了解决方案..

Form1.cs中的

public Form1()
{
    InitializeComponent();
    fileTransfer1.refreshAction = new Action (RefreshFM);
    //let's say refreshAction is a public action variable in fileTransfer1 class
}

public void RefreshFM()
{
    fileManagerLocal1.btnRefresh.PerformClick();
}
userControl1.cs中的

public Action refreshAction;
//then it can be called from any place.

private void RefreshLocalFM()
{
    refreshAction.Invoke(); //this fires the action that we initialized from form1.cs
}