我认为答案很容易,但我找不到......
我有一个以这种方式编程的列表视图:
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
答案 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) {
// ...
}