How to add event handler for dynamically created controls at runtime?
我正在开发 C# windows 应用程序。我的应用程序从自定义控件库中获取控件(按钮、文本框、富文本框和组合框等),并在运行时动态地将它们放入表单中。我如何使用委托为该控件创建事件处理程序?以及如何在特定的自定义控件点击事件中添加业务逻辑?
例如:
我有 user1、user2、user3,当 user1 登录时,我只想显示"保存"按钮。当用户 2 只显示"添加和删除"按钮,用户 3 只显示"添加和更新"按钮。根据用户登录信息创建的文本框和按钮从数据库表中获取。在这种情况下,我如何处理不同的事件(添加,保存、更新、删除)用于按钮保存、添加、删除和更新时为不同的用户动态创建表单控件(保存、添加、删除和更新按钮对象来自同一个按钮类)
使用匿名方法:
1 2 3 4 5 |
使用带有显式参数的匿名方法:
1 2 3 4 5 | Button button1 = new Button(); button1.Click += delegate (object sender, EventArgs e) { // Do something }; |
使用匿名方法的 lambda 语法:
1 2 3 4 5 | Button button1 = new Button(); button1.Click += (object sender, EventArgs e) => { // Do something }; |
使用方法:
1 2 3 4 5 6 7 | Button button1 = new Button(); button1.Click += button1_Click; private void button1_Click(object sender, EventArgs e) { // Do something } |
您可以在 MSDN 文档中找到更多信息。
1 2 3 4 5 6 7 |
它正在将双击事件处理程序添加到新的 TextBox
我相信你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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. |