Как установить действие функции userControl из родительской формы? - PullRequest
0 голосов
/ 18 марта 2012

У меня есть функция 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 ]

1 голос
/ 18 марта 2012

Я разобрался с решением ..

в 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
}
1 голос
/ 18 марта 2012

Мне не понятно, что вы подразумеваете под «установить действие функции».Вы хотите немедленно вызвать эту функцию в контексте контроллера?в этом случае указанный вами код верен.Если, с другой стороны, вы хотите настроить пользовательский элемент управления на использование предоставленного действия в более позднем коде, вам нужно сохранить это действие следующим образом

в userControl1

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

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

НадеюсьЯ вас правильно понял ..

...