C#动态添加按钮并使用它发送事件参数

时间:2012-07-18 12:47:46

标签: c# winforms listview event-handling

我认为答案很容易,但我找不到......

我有一个以这种方式编程的列表视图:

ListView board = new ListView();

board.Bounds = new Rectangle(new Point(0, 0), new Size(this.Width, this.Height));

board.View = View.Details;
board.LabelEdit = false;
board.AllowColumnReorder = false;
board.GridLines = true;

//textPieces 0 = Van 1 = Titel 2 = Ontvangen 3 = groote

board.Columns.Add(" Afzender ", -10, HorizontalAlignment.Center);
board.Columns.Add(" Titel ", -10, HorizontalAlignment.Center);
board.Columns.Add(" Ontvangen ", -10, HorizontalAlignment.Center);
board.Columns.Add(" Groote ", -10, HorizontalAlignment.Center);
board.Columns.Add(" Bekijken ", -10, HorizontalAlignment.Center);

for (int c = 0; c < new_message_counter; c++)
{
    ListViewItem item = new ListViewItem(berichten_verzameling[c, 0], 0);
    item.SubItems.Add(berichten_verzameling[c, 1]);
    item.SubItems.Add(berichten_verzameling[c, 2]);
    item.SubItems.Add(berichten_verzameling[c, 3]);
    Button dynamicbutton = new Button();
    dynamicbutton.Text = "Bekijk dit bericht";
    dynamicbutton.Name = "show_all_number_" + c;
    item.SubItems.Add(dynamicbutton);
    board.Items.Add(item);
}

groupBox1_all_message.Controls.Add(board);

正如你们中的一些人可能已经看到的那样,有一个错误...因为这不起作用:(item.SubItems.Add(dynamicbutton);)

所以我的第一个问题是如何在其他信息的同一行显示按钮。

另外,如何动态地为所有这些按钮创建一个事件处理程序,并用它发送一些参数......

就像在html / javascript中一样:

<button OnClick="DoStuff(5,true);">do it!</button>

但我怎么能在C#中做到这一点?

提前致谢 TWCrap

4 个答案:

答案 0 :(得分:3)

第一个问题

How would you add a button onto standard winform listview control

由于listview(或listviewitem)不能作为容器运行,因此无法直接添加控件。您可能需要查找自定义方法/扩展功能。请查看文章中的ListViewExtender How to add button into a listview in winforms

第二个问题

  How to make event handler to the button and add event argument to it

使用ListViewExtender后,您可以使用自定义ListViewColumns获取listviewitem子文本的参数。您不需要从UI

传递参数
dynamicbutton.Click += OnButtonActionClick();

 private void OnButtonActionClick(object sender, ListViewColumnMouseEventArgs e)
{
    // you clicked the button.
    MessageBox.Show("your current listviewItem - " - e.SubItem.Text)
}

答案 1 :(得分:1)

试试这个

    Button dynamicbutton = new Button();
    dynamicbutton.Command += new CommandEventHandler(dynamicbutton_Command);
    dynamicbutton.CommandName = "myCommandName";
    dynamicbutton.CommandArgument = anyID;

void dynamicbutton_Command(object sender, CommandEventArgs e)
{
   // do stuff
}

并尝试添加yr按钮

item.Controls.Add(dynamicbutton);

答案 2 :(得分:0)

嗯,第2部分,您可以将“Click”事件绑定到do ...循环中的事件处理程序。 (例如button.Click + = {event})

第1部分=&gt;我认为此链接可以帮助您:Adding button into a Listview in WinForms

答案 3 :(得分:0)

的λ

dynamicButton.Click += (sender, e) => {
    // ...
}

完整签名

dynamicButton.Click += ClickEventCallback;

private void ClickEventCallback(object sender, EventArgs e) {
    // ...
}