Как установить работу кнопки пользовательского элемента управления после добавления ее в какую-либо форму? - PullRequest
0 голосов
/ 13 марта 2012

Я создаю userControl с именем [File_Manager], и мне было интересно, могу ли я добавить кнопку к этому пользовательскому элементу управления, чтобы я мог установить его работу позже после добавления этого пользовательского элемента управления в другую форму ... что-то вроде

File_Manager fManager = new File_Manager();

fManager.SetFreeButtonJob( MessageBox.Show("Hello") ); // something like this.

затем всякий раз, когда пользователь нажимает эту кнопку ... появляется окно сообщения.

Итак ... Возможно ли это сделать?

спасибо заранее.

Ответы [ 2 ]

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

Конечно, вы можете.Просто прикрепите обработчик нажатия кнопок к действию, которое вы передаете.

fManager.SetFreeButtonJob(() => MessageBox.Show("Hello"));
private void SetFreeButtonJob(Action action)
{
    button1.Click += (s,e) => action();
}

Просто обратите внимание, что передача в действии нарушает инкапсуляцию пользовательского элемента управления.Вы, вероятно, должны сделать что-то вроде SetFreeButtonJob(Jobs.SayHello); и поместить знания о том, что делать внутри элемента управления.

0 голосов
/ 13 марта 2012

Создайте пользовательское событие для вашего UserControl и запустите его при нажатии на Button. Затем вы можете прикрепить обработчик событий к пользовательскому событию в вашем Form. Или вы можете просто поднять событие UserControl's Click при нажатии на Button.

public delegate void CustomClickEventHandler(object sender, EventArgs e);

public partial class buttonTest : UserControl
{
    public event CustomClickEventHandler CustomClick;
    public buttonTest()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        CustomClick(sender, e);
    }
}

и в вашем Form

public Form1()
{
    InitializeComponent();

    buttonTest1.CustomClick +=new CustomClickEventHandler(userControl1_ButtonClick);

}

private void  userControl1_ButtonClick(object sender, EventArgs e)
{
    MessageBox.Show("Hello"); 
}

Или, как мой второй вариант, попробуйте.

private void button2_Click(object sender, EventArgs e)
{
    OnClick(e);
}

и в вашей Form подпишитесь на событие Click UserControl.

buttonTest1.Click +=new EventHandler(buttonTest1_Click);


private void buttonTest1_Click(object sender, EventArgs e)
{
    MessageBox.Show("Hello Again"); 
}
...