C# 如何在运行时为动态创建的控件添加事件处理程序?
我正在开发C#windows应用程序。我的应用程序从自定义控件库中获取控件(按钮、文本框、富文本框和组合框等),并在运行时将它们动态地放入表单中。如何使用委托为该控件创建事件处理程序?以及如何在特定的自定义控件单击事件中添加业务逻辑 例如: 我有user1,user2,user3,当user1登录时,我只想显示“保存”按钮。当用户2只显示“添加和删除”按钮,用户3只显示“添加和更新”按钮时。文本框和按钮是根据用户登录数据库表中的信息创建的。在这种情况下,我如何处理按钮保存的不同事件(添加、保存、更新、删除),添加,动态创建表单控件时为不同用户删除和更新(保存、添加、删除和更新按钮对象来自同一按钮类) 它正在使用匿名方法将双击eventhandler添加到新的文本框中:C# 如何在运行时为动态创建的控件添加事件处理程序?,c#,winforms,C#,Winforms,我正在开发C#windows应用程序。我的应用程序从自定义控件库中获取控件(按钮、文本框、富文本框和组合框等),并在运行时将它们动态地放入表单中。如何使用委托为该控件创建事件处理程序?以及如何在特定的自定义控件单击事件中添加业务逻辑 例如: 我有user1,user2,user3,当user1登录时,我只想显示“保存”按钮。当用户2只显示“添加和删除”按钮,用户3只显示“添加和更新”按钮时。文本框和按钮是根据用户登录数据库表中的信息创建的。在这种情况下,我如何处理按钮保存的不同事件(添加、保存、
Button button1 = new Button();
button1.Click += delegate
{
// Do something
};
Button button1 = new Button();
button1.Click += (object sender, EventArgs e) =>
{
// Do something
};
使用带有显式参数的匿名方法:
Button button1 = new Button();
button1.Click += delegate (object sender, EventArgs e)
{
// Do something
};
使用匿名方法的lambda语法:
Button button1 = new Button();
button1.Click += delegate
{
// Do something
};
Button button1 = new Button();
button1.Click += (object sender, EventArgs e) =>
{
// Do something
};
方法:
Button button1 = new Button();
button1.Click += button1_Click;
private void button1_Click(object sender, EventArgs e)
{
// Do something
}
您可以在中找到更多信息。我相信您可以这样做:
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.