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)はコンテナーとして機能しないため、コントロールを直接追加する方法はありません。カスタムメソッド/拡張機能を探す必要があるかもしれません。WinFormsのリストビューにボタンを追加する方法ListViewExtenderの記事を参照して ください

2番目の質問

  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
}

また、これを試して年ボタンを追加してください

item.Controls.Add(dynamicbutton);
于 2012-07-18T12:53:00.203 に答える
0

lambda

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

full signature

dynamicButton.Click += ClickEventCallback;

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

さて、このパート 2 では、「Click」イベントを do.. ループのイベント ハンドラにバインドするだけです。(例: button.Click += {イベント})

パート 1 => このリンクが役立つと思います: Adding button into a Listview in WinForms

于 2012-07-18T12:53:37.133 に答える