如何动态创建按钮并添加不同的事件处理程序?

时间:2018-10-30 10:44:27

标签: c#

我创建了一个函数,可以将按钮添加到表单中。单击按钮应打开不同的文件。文件路径在listbox1中。我想为我添加的每个按钮添加一个click事件。一个按钮应该打开listbox1中的一个文件。

带有附加按钮的部分可以工作,但是我不能为每个按钮添加一个不同的事件。

这是我的代码。它将事件添加到每个按钮,但仅最后一个按钮。

PlaySong是播放“ .mp3”文件的功能。可行。

有人可以帮我吗?

int i = 0;
private void Load_Songs()
{
    List<string> url = new List<string>();
    url = listBox1.Items.Cast<String>().ToList();
    int p = 5;
    for (int j = 0; j < listBox1.Items.Count; j++)
    {
        EventHandler klik = new EventHandler(Playing);
        Song_Data titl = new Song_Data(url[j]);
        Button n = new Button
        {
            Text = titl.Title,
            Location = new Point(0, p + 20),
            Width = ClientRectangle.Width / 3,
            FlatStyle = FlatStyle.Flat
        };
        p += 20;
        n.Click += klik;
        List_Artist.Controls.Add(n);
        i++;
    }
}

private void Playing(object sender, EventArgs e)
{
    PlaySong(listBox1.Items[i].ToString());
}

1 个答案:

答案 0 :(得分:1)

您不需要很多事件处理程序,只需将索引存储到循环中按钮的Tag中,然后使用它来查找应使用的索引即可从列表框中选择:

global.css

然后在您的处理程序中:

.cdk-overlay-container, .cdk-overlay-pane {
     z-index: 9999 !important;
}

为每个按钮使用不同的处理程序,您可以使用匿名事件处理程序,但不能解决您的问题:

Button n = new Button
{      
    Text = titl.Title,
    Location = new Point(0, p + 20),
    Width = ClientRectangle.Width / 3,
    FlatStyle = FlatStyle.Flat,
    Tag = j
};