我想答案很简单,但我找不到…
我有一个列表视图是这样编程的:
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) {
// ...
}