2

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

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

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

4 回答 4

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)
}
于 2012-07-18T13:27:43.173 回答
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);
于 2012-07-18T12:53:00.203 回答
0

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

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

于 2012-07-18T12:53:37.133 回答
0

拉姆达

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

完整签名

dynamicButton.Click += ClickEventCallback;

private void ClickEventCallback(object sender, EventArgs e) {
    // ...
}
于 2012-07-18T13:05:52.523 回答