如何在运行时为动态创建的控件添加事件处理程序?

时间:2013-07-25 10:27:00

标签: c# winforms

我正在使用C#windows应用程序。我的应用程序从自定义控件库获取控件(按钮,文本框,富文本框和组合框等),并在运行时动态地将它们放入表单中。我如何使用委托创建该控件的事件处理程序?以及如何在特定的自定义控件点击事件中添加业务逻辑?

例如:

我有user1,user2,user3,当user1登录时我想只显示“保存”按钮。当user2然后只显示“添加和删除”按钮,用户3只显示“添加和更新”按钮。文本框和按钮创建的按钮登录从DB表中获取的信息。在这种情况下我如何处理不同的事件(添加,保存,更新,删除)为动态创建表单时的不同用户按钮保存,添加,删除和更新控件(保存,添加,删除和更新按钮对象来自相同的按钮类)

3 个答案:

答案 0 :(得分:4)

使用匿名方法:

Button button1 = new Button();
button1.Click += delegate
                    {
                        // Do something 
                    };

使用方法:

Button button1 = new Button();
button1.Click += button1_Click;

private void button1_Click(object sender, EventArgs e)
{
    // Do something
}

您可以在MSDN Documentation中找到更多信息。

答案 1 :(得分:3)

var t = new TextBox();
t.MouseDoubleClick+=new System.Windows.Input.MouseButtonEventHandler(t_MouseDoubleClick);

private void t_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
     throw new NotImplementedException();
}

它将双击事件处理程序添加到新TextBox

答案 2 :(得分:2)

我相信你可以这样做:

if (userCanAdd)
    container.Controls.Add(GetAddButton());
if (userCanUpdate)
    container.Controls.Add(GetUpdateButton());
if (userCanDelete)
    container.Controls.Add(GetDeleteButton());

private Button GetAddButton() {
    var addButton = new Button();
    // init properties here

    addButton.Click += (s,e) => { /* add logic here */ };
    // addButton.Click += (s,e) => Add();
    // addButton.Click += OnAddButtonClick;

    return addButton;
}

private void OnAddButtonClick (object sender, EventArgs e) { 
    // add logic here
}

// The other methods are similar to the GetAddButton method.