2016-09-06 8 views
0

利用可能なrs232ポートの数に基づいて、MenuStripsを動的に追加します。 問題は、接続で使用するために、コントロールのテキストにアクセスすることです。Dynamic Menustripアクセスvb.net

Private Sub FormConnection_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    myPort = IO.Ports.SerialPort.GetPortNames() 

    Dim Ports As Array = CType(myPort, Object()) 
    If Ports.Length = 0 Then 
     MessageBox.Show("No connections available.") 
    Else 

     Dim PortsLength As Integer = Ports.Length 
     For Length As Integer = 0 To PortsLength - 1 

      Dim Item As New ToolStripMenuItem(Ports(Length).ToString, Nothing, _ 
      New EventHandler(AddressOf MenuCOMclick)) 
      Item.CheckOnClick = True 
      Item.Name = "COMDYN" + Length.ToString 
      PortsToolStripMenuItem.DropDownItems.Add(Item) 
     Next 
End If 

は、今私は、他のすべてがチェックされ、メニューの1つがクリックされたイベントMenuCOMclickを追加します。

コントロールの配列を作成しようとしましたが、menustripsはそのようには動作しません。 どうすればいいですか?

Private Sub MenuCOMclick(ByVal sender As Object, ByVal e As EventArgs) 
    ??? 
    ??? 
    ??? 
End Sub 

+0

「他のすべてはチェックされていません」とはどういう意味ですか? – jonathana

+0

は "未チェック"ではありません。私はクリックしているものを除いてすべてチェックを外したいと思います。どのプログラムをチェックして、後で自分のプログラムで使うのかを知るためにアクセスする方法 – noidea

答えて

0

あなたはsender(イベントを発生させたれたコントロール)にアクセスしたい場合は、送信者をキャストする必要があることをごMenuStrip、 ノートでToolStripMenuItemsにアクセスする方法のthatsありがとうコントロールタイプ。

また、すべてのToolStripMenuItemを繰り返し処理することもできます。私のコメントを読んでください

Private Sub MenuCOMclick(ByVal sender As Object, ByVal e As EventArgs) 
    ' thats how you can check the name of the sender 
    MsgBox(CType(sender, ToolStripMenuItem).Name) 
    ' thats how you can itterate all ToolStripMenuItem 
    For Each itm As ToolStripMenuItem In MenuStrip1.Items 
     For Each Childitm As ToolStripMenuItem In itm.DropDownItems 
      MsgBox(Childitm.Name) ' show name of the item 
      ' example to access all items properties accept the sender 
      If Childitm.Name <> CType(sender, ToolStripMenuItem).Name Then 
       itm.ForeColor = Color.Beige 
      End If 
     Next 
    Next 
End Sub