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

C# 如何动态创建按钮和添加不同的事件处理程序?,c#,C#,我创建了一个在表单中附加按钮的函数。单击按钮时,应打开不同的文件。文件路径位于listbox1中。我想为我附加的每个按钮添加一个单击事件。一个按钮应打开listbox1中的一个文件 带有附加按钮的部分可以工作,但我不能为每个按钮添加不同的事件,只能添加一个 这是我的密码。它将事件添加到每个按钮,但仅添加最后一个按钮 PlaySong是一个播放“.mp3”文件的函数。这很有效 有人能帮我吗 int i = 0; private void Load_Songs() { List<str

我创建了一个在表单中附加按钮的函数。单击按钮时,应打开不同的文件。文件路径位于listbox1中。我想为我附加的每个按钮添加一个单击事件。一个按钮应打开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());
}
inti=0;
私密歌曲
{
列表url=新列表();
url=listBox1.Items.Cast().ToList();
int p=5;
对于(int j=0;j
您不需要太多的事件处理程序,只需将按钮标记的索引存储在循环中,然后使用它来查找应从列表框中选择的索引:

Button n = new Button
{      
    Text = titl.Title,
    Location = new Point(0, p + 20),
    Width = ClientRectangle.Width / 3,
    FlatStyle = FlatStyle.Flat,
    Tag = j
};
然后在处理程序中:

private void Playing(object sender, EventArgs e)
{
    int i= (int)((Button)sender).Tag;
    PlaySong(listBox1.Items[i].ToString());
}
要对每个按钮使用不同的处理程序,可以使用匿名事件处理程序,但无法解决问题:

n.Click += (s, ev) =>
{
    //code when button clicked
};