2017-03-22 2 views
0

システム上で使用可能なSerialPortsの読み込みとmenuStripアイテムの設定に依存するプログラムを構築しています。私はmenuStripサブメニューに値を設定することができましたが、動的に埋め込まれたリストにクリックイベントを追加する方法について固まっています。私のコードは以下の通りです:私は何かのように感じるC#ダイナミックなmenuStripアイテムに対してクリックアクションを割り当てます。

public void getPorts() 
    { 
     int count = 0; 
     string[] ports = SerialPort.GetPortNames(); 
     foreach(string port in ports) 
     { 
      //MessageBox.Show("Serial Port " + port + " found!"); 
      ToolStripItem subItem = new ToolStripMenuItem(port); 
      portMenuItem.DropDownItems.Add(port); 
      count += 1; 
     } 
    } 

foreachループに入る必要があるが、私はそれを見つけることができませんでした。どんな助けも素晴らしいだろう!

答えて

2

ちょうどあなたが追加されている各メニュー項目にハンドラを割り当てる:

ToolStripItem subItem = new ToolStripMenuItem(port); 
subItem.Click += MenuItem_Click; 
// you should add menu item to some menu here 

あなたは、メニュー項目のタイプにイベント送信元のオブジェクトをキャストすることによって、ハンドラ内でクリックされたアイテムを取得することができます

private void MenuItem_Click(object sender, EventArgs e) 
{ 
    var menuItem = (ToolStripMenuItem)sender; 
    var port = menuItem.Text; 
    // ... 
} 

をアップデート - アイテムをToolStripDropDownButtonに追加する:

foreach(string port in ports) 
{ 
    portMenuItem.DropDownItems.Add(port).Click += MenuItem_Click; // see definition above 
} 
+0

チップをありがとう。私はそれを使用しようとし、MenuItem_Clickで単純なMessageBox.Showを追加しましたが、動作していないようです。たとえば、私のコンピュータはポートCOM5、COM1、およびCOM11を報告します。私がCOM5をクリックすると、メッセージボックスにはプロダクトが表示されません。私は何かを欠いていると思いますか? – Alex

+0

@Alexはあなたのように思えます。各メニューアイテム 'subItem.Click + = MenuItem_Click; 'にイベントハンドラを割り当てて、そのメソッドにブレークポイントを設定してください。メニュー項目 –

+0

@ SergeyBerezovskyをクリックしたときにブレークポイントが当てはまるかどうかチェックしてください申し訳ありませんが、私は上記のsubItem.Click + = MenuItem_Clickコードにも追加しておきました。まだ動作しません... 編集: 'menuItem_Click'関数にブレークポイントを追加しました。サブアイテムをクリックしてブレークポイントを起動しません。 – Alex

関連する問題