vb.net, как я могу получить список активных и открытых форм в MDIparent внутри MenuStrip по горизонтали? - PullRequest
0 голосов
/ 10 мая 2018

Пожалуйста, как я могу получить аналогичные открытые и активные дочерние формы, расположенные в «Windows» ToostripMenuItem в MdiParent, как показано на рисунке ниже. но я хочу их горизонтально, есть ли что-нибудь к этому? Я ценю вашу помощь. enter image description here

ОБНОВЛЕНИЕ: РЕШЕНИЕ
Я нашел способ сделать то, что я хочу, и вот решение
Сначала этот код должен добавить ToolStripMenuItem в mdiparent на form_load

  Me.MdiParent = MDIParent1
    mdf.BackColor = Color.Red
    mdf.Text = Me.Text
    AddHandler mdf.Click, AddressOf mdf1_Click
    MDIParent1.MenuStrip.Items.Add(mdf)

затем обработчик щелчка ToolStripMenuItem в форме

Private mdf As New ToolStripMenuItem
Private Sub mdf1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Me.BringToFront()
End Sub

и этот код предназначен для удаления ToolStripMenuItem при закрытии формы в событии (Form_formclosing)

Try
        Dim ParentForm As MDIParent1 = MDIParent1
        Dim OptionsMenuStrip As MenuStrip = ParentForm.Controls("MenuStrip")
        Dim Items As ToolStripItemCollection = OptionsMenuStrip.Items
        Dim removeThese As New List(Of ToolStripMenuItem)
        For Each Item As ToolStripMenuItem In Items
            If Item.Text = Me.Text Then
                removeThese.Add(Item)
            End If
        Next
        For Each item In removeThese
            Items.Remove(item)
            item.Dispose()
        Next
    Catch ex As Exception
        MsgBox(ex.Message)

    End Try

и установить задний цвет на красный для ToolStripMenuItem активной формы в событии MdiParent_MdiChilActivate

Private Sub MDIParent1_MdiChildActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MdiChildActivate
    Try
        Dim activeChild As Form = Me.ActiveMdiChild
        Dim ParentForm As MDIParent1 = Me
        Dim OptionsMenuStrip As MenuStrip = ParentForm.Controls("MenuStrip")
        Dim Items As ToolStripItemCollection = OptionsMenuStrip.Items
        For Each Item As ToolStripMenuItem In Items
            If Item.Text = activeChild.Text Then
                Item.BackColor = Color.Red
            Else
                Item.BackColor = Color.LightGray
            End If
        Next
    Catch
    End Try
End Sub

и результат: (активной формой является красный ToolStripMenuItem):

enter image description here

...