VB.NET Выполнение кода для событий для динамически добавленного ToolStripMenuItem

VB.NET
При открытии пункта меню (то есть пункта меню верхнего уровня) я добавил ToolStripMenuItem (то есть DropDownItem) к пункту меню во время выполнения.

ToolStripMenuItems, добавленные мной во время выполнения, являются именами форм, активных в текущем проекте.

При каждом щелчке по ToolStripMenuItem с определенным именем формы следует уделять внимание форме.

Как я могу выполнить нужный код для события динамически добавленного ToolStripMenuItem?

Private Sub WindowToolStripMenuItem_DropDownOpening(sender As Object, e As System.EventArgs) Handles WindowToolStripMenuItem.DropDownOpening
        WindowToolStripMenuItem.DropDown.Items.Clear()

        For Each Form In My.Application.OpenForms
            If Not Form.name = frmLogin.Name And Not Form.name = Me.Name Then
                Dim tmiForm = New ToolStripMenuItem()
                tmiForm.Name = Form.name
                tmiForm.Text = Form.text
                WindowToolStripMenuItem.DropDownItems.Add(tmiForm)
            End If
        Next

    End Sub


я хочу сфокусироваться на форме, основанной на событии click tmiForm...
Я пытался искать в Интернете, я получил только результаты для C#

3 ответа

Решение

Попробуй это-

Private Sub clickeventhandler(sender As Object, e As EventArgs)
    For Each Form In My.Application.OpenForms
        If CType(sender, ToolStripMenuItem).Name = Form.Name Then
            Form.Focus()
            Exit Sub
        End If
    Next
End Sub

Ваш предыдущий код выглядит нормально, просто добавьте одну строку.
После

WindowToolStripMenuItem.DropDownItems.Add(tmiForm)

написать это-

AddHandler tmiForm.Click, AddressOf clickeventhandler

Используйте AddHandler:

AddHandler tmiForm.Click, AddressOf ClickHandler

Вот как вы можете написать свой ClickHandler:

Public Sub ClickHandler(ByVal sender As Object, ByVal e As EventArgs)
  'for a condition based on a ToolStripMenuItem that fired it
  'If CType(sender, ToolStripMenuItem).Name ...
End Sub

Я использовал более простой подход. Когда вы щелкаете по значку меню, в правой верхней части окна появляется маленькая стрелка. Нажмите на стрелку, чтобы открыть окно свойств меню. Вы можете установить видимые свойства, чтобы контролировать то, что будет видно в начальном меню. Вы также можете установить или очистить видимый атрибут в коде:

    Public Sub MenuManage(Wayside As Integer, Vehicle As Integer, _
    System As Integer, Tools As Integer, Reports As Integer, _
    Edit As Integer, Zoom As Integer)

    Main.WaysideToolStripMenuItem.Visible = Wayside
    Main.VehicleToolStripMenuItem.Visible = Vehicle
    Main.SystemToolStripMenuItem.Visible = System
    Main.ToolsToolStripMenuItem1.Visible = Tools
    Main.ReportsToolStripMenuItem.Visible = Reports
    Main.EditToolStripMenuItem.Visible = Edit
    Main.ZoomToolStripMenuItem.Visible = Zoom

    End Sub

В коде события Load и FormClosed управляйте тем, что отображается в меню:

Вызов MenuManage(True, True, True, True, True, False, False)

Другие вопросы по тегам