Childform ToolStrip v MDI - umístění   zodpovězená otázka

VB.NET, WinForms

Prosím jestli by někdo nedokázal poradit.

Mám child form ze kterého pomocí kódu přebírám do MDI celý ToolStrip (chTS). V MDI mám již jeden ToolStrip pro obsluhu MDI formu. Používám ToolStrip panely.

Můj problém spočívá v umístění chTS v panelu MDI. Vím, že uspořádání ToolStripů závisí na z-orderu, ale nedaří se mi docílit toho, aby chTS byl umístěn jako poslední v řadě (zobrazuje se před MDI ToolStrip). Popřípadě jestli je možné nějak docílit umístění chTS do nového řádku.

Předem děkuji za info

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém jsem již vyřešil. Třeba se to bude někomu hodit.

- v MDiFormu mám prázdný ToolStrip pro ChildForm ToolStripItems a je Visible=false

- při otevření ChildForm získám ToolStripItemsCollection a vložím do připraveného ToolStrip v MDi pomocí ToolStripManager.Merge. Zobrazím ToolStrip.

- při deaktivaci ChildForm použiji ToolStripManager.RevertMerge

- pokud není otevřen žádný ChildForm nastavím pro ToolStrip opět Visible=false

Public Class ChForm
    Inherits ChildForm
    Public Sub New()
        ' toto je ten otevirany ChildForm
        Me.ChTsiColl = toolStrip1.Items
    End Sub
End Class

Public Class ChildForm
    Inherits Form
    Private m_ChTsiColl As ToolStripItemCollection
   
    Public Sub New()
    End Sub
   
    Public Property ChTsiColl() As ToolStripItemCollection
        Get
            Return m_ChTsiColl
        End Get
        Set(ByVal value As ToolStripItemCollection)
            m_ChTsiColl = value
        End Set
    End Property
End Class

Public Partial Class MyMDiForm
    Inherits Form
    Private Sub ShowChildForm()
        ' vytvorim novou instanci ChildForm newChildForm
        AddHandler newChildForm.Activated, AddressOf newChildForm_Activated
        AddHandler newChildForm.Deactivate, AddressOf newChildForm_Deactivate
        newChildForm.Show()
    End Sub
End Class

Private Sub newChildForm_Activated(ByVal sender As Object, ByVal e As EventArgs)
    Me.toolStripChildItems.Visible = True
    Dim child As ChildForm = DirectCast(sender, ChildForm)
    ToolStripManager.Merge(child.ChTsiColl, Me.toolStripChildItems)
End Sub

Private Sub newChildForm_Deactivate(ByVal sender As Object, ByVal e As EventArgs)
    ToolStripManager.RevertMerge(Me.toolStripChildItems)
    If Me.ActiveMdiChild Is Nothing Then
        Me.toolStripChildItems.Visible = False
    End If
End Sub

překládal jsem to ze C# tak snad je to dobře.

Možná to lze vyřešit i nějak lépe. Jsem stále začátečník

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Chybička se vloudila, property ChildFormu nemá být ToolStripCollection ale ToolStrip.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback