需要一个事件处理程序来处理动态添加的控件,该控件与另一个动态添加的控件交互

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要一个事件处理程序来处理动态添加的控件,该控件与另一个动态添加的控件交互相关的知识,希望对你有一定的参考价值。

我需要一个带有click事件的动态添加标签,以向动态添加的datagridview添加一行。我知道如何让事件处理程序使用动态添加的标签,但我不知道如何让它与datagridview一起使用。

我已经尝试将datagridview参数添加到事件处理程序,但这对我不起作用。

用于创建datagridview和链接标签的代码。

foreach (DataRow rows in dtbl.Rows)
            {

                // Create Datagridview
                DataGridView datagridview = new DataGridView();

                // Create link labels
                LinkLabel linkLabel = new LinkLabel();

                // Add event handler to the link labels
                linkLabel.Click += new EventHandler(this.linkLabel_Click); 

                this.Controls.Add(datagridview);
                this.Controls.Add(linkLabel);
            }

// Event handler 

  private void linkLabel_Click(object sender, EventArgs e)
        {
            // This doesnt work because "datagridview" doesnt exist, but I just have no idea how to get this to interact with the dynamically created datagridviews.


            int rowIndex = datagridview.Rows.Add();
            DataGridViewRow row = datagridview.Rows[rowIndex];
            row.Cells[0].Value = "5";
            datagridview.CurrentCell = row.Cells[0];
        }


I expect each link label to add a new row to the datagridview it was created with in the for loop. But I just don't how to code it.
答案

在您创建foreachLinkLabelDataGridView循环中,您可以将DataGridView的引用分配给LinkLabel - 假设您在Windows窗体或WPF中执行此操作,您可以使用控件的Tag属性:

linkLabel.Tag = datagridView;

然后,在您的点击事件中,获取参考:

LinkLabel linkLabel = (LinkLabel)sender;
DataGridView datagridView = (DataGridView)linkLabel.Tag;

以上是关于需要一个事件处理程序来处理动态添加的控件,该控件与另一个动态添加的控件交互的主要内容,如果未能解决你的问题,请参考以下文章

我动态创建了一个canvas,上面动态创建了一些控件,我现在想使用这些控件,该怎么弄

XAML: 自定义控件中事件处理的最佳实践

XAML: 自定义控件中事件处理的最佳实践

处理 WPF 用户控件的事件

向任何控件添加事件处理程序会导致 Visual Studio 中的错误

mfc 动态为控件添加事件2