Guckguck,
ich hatte im Tutorial-Bereich ja bereits ein Beispiel-Projekt für das Mdi-Handling via TabControl bereitgestellt.
Darin hatte ich alles, was die MdiParent/Child/TabControl betrifft in die main-form gepackt. Ich wollte das gerne separieren und habe
dafür nun ein eigenes Modul erstellt, was alles abhandelt:
Spoiler anzeigen
Der Aufruf erfolgt dann über:
also konkret für mein Projekt:
kann man das so machen? Gibt's sinnvolle Abkürzungen? Ist mein erstes Projekt in die Richtung - so wäre es aber universell einsetzbar und kann
einfach als Modul zu einem Projekt hinzugefügt werden...
Wenn das so passt, würde ich das Tutorial ggf. noch anpassen
ich hatte im Tutorial-Bereich ja bereits ein Beispiel-Projekt für das Mdi-Handling via TabControl bereitgestellt.
Darin hatte ich alles, was die MdiParent/Child/TabControl betrifft in die main-form gepackt. Ich wollte das gerne separieren und habe
dafür nun ein eigenes Modul erstellt, was alles abhandelt:
VB.NET-Quellcode
- Public Module Mdi
- Private _tabControl As TabControl
- Private _mdiParent As Form
- Public Sub ShowMdiChild(mdiTab As TabControl, mdiParent As Form, mdiChild As Form, dts As DataSet) 'dts ist optional - Mdi arbeitet auch ohne
- _tabControl = mdiTab
- _mdiParent = mdiParent
- MdiHandle() ' Initialisierung der Handle-Methoden
- With mdiChild
- If .Visible Then
- .BringToFront()
- Else
- dts.Register(.Self, True) ' Optional nur mit den Helpers von ErfinderDesRades
- ControlStyling.StyleControls(.Self) ' Optional: eine Erweiterung von ErfinderDesRades
- .MdiParent = _mdiParent
- .Show()
- End If
- End With
- End Sub
- ''' <summary>
- ''' Registriert die Handle-Methoden für die Steuerung der Child-Forms
- ''' </summary>
- Private Sub MdiHandle()
- AddHandler _mdiParent.MdiChildActivate, AddressOf MdiOpenHandle
- AddHandler _tabControl.SelectedIndexChanged, AddressOf MdiActivateHandle
- End Sub
- Private Sub MdiClose(sender As Object, e As FormClosedEventArgs)
- TryCast(TryCast(sender, Form).Tag, TabPage).Dispose()
- End Sub
- Private Sub MdiOpenHandle(sender As Object, e As EventArgs)
- Dim Parent = DirectCast(sender, Form)
- If Parent.ActiveMdiChild Is Nothing Then
- _tabControl.Visible = False
- Else
- Parent.ActiveMdiChild.WindowState = FormWindowState.Maximized
- Dim tp As New TabPage(Parent.ActiveMdiChild.Text)
- If Parent.ActiveMdiChild.Tag Is Nothing Then
- tp.Tag = Parent.ActiveMdiChild
- tp.Parent = _tabControl
- _tabControl.SelectedTab = tp
- Parent.ActiveMdiChild.Tag = tp
- AddHandler Parent.ActiveMdiChild.FormClosed, AddressOf MdiClose
- End If
- If Not _tabControl.Visible Then _tabControl.Visible = True
- End If
- End Sub
- Private Sub MdiActivateHandle(sender As Object, e As EventArgs)
- Dim tabControl = DirectCast(sender, TabControl)
- If tabControl.SelectedTab IsNot Nothing AndAlso tabControl.SelectedTab.Tag IsNot Nothing Then TryCast(tabControl.SelectedTab.Tag, Form).Select()
- End Sub
- End Module
Der Aufruf erfolgt dann über:
ShowMdiChild(TabControlFürMdi, ParentForm, My.Forms.ChildForm, DataSet)
also konkret für mein Projekt:
ShowMdiChild(tabMDI, Me, My.Forms.frmMitarbeiter, dts)
kann man das so machen? Gibt's sinnvolle Abkürzungen? Ist mein erstes Projekt in die Richtung - so wäre es aber universell einsetzbar und kann
einfach als Modul zu einem Projekt hinzugefügt werden...
Wenn das so passt, würde ich das Tutorial ggf. noch anpassen
"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"