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



我想答案很简单,但我找不到…

我有一个列表视图是这样编程的:

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

第一个问题

How would you add a button onto standard winform listview control

由于listview(或listviewitem)不起容器的作用,因此无法直接添加控件。您可能需要查找自定义方法/扩展功能。查看文章中的ListViewExtender如何在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)
}

试试这个

    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部分中,您可以将"Click"事件绑定到do..循环中的事件处理程序。(例如按钮。点击+={event})

第1部分=>我认为这个链接会对您有所帮助:将按钮添加到WinForms 的Listview中

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

全签名

dynamicButton.Click += ClickEventCallback;
private void ClickEventCallback(object sender, EventArgs e) {
    // ...
}

相关内容

  • 没有找到相关文章

最新更新