一个简单的标签式 MDI






2.88/5 (11投票s)
2005年3月12日
2分钟阅读

80857

1582
使用选项卡控件管理 MDI 子窗体。
引言
我尝试使用选项卡控件来跟踪打开的 MDI 子窗体。这部分是我学习 .NET 的过程,从 VB6 过渡过来,需要了解如何完成基本操作。
我的团队正在重写一个大型遗留应用程序,我们一直在努力建立一个 GUI 框架。我们不希望子窗体出现在 Windows 任务栏上,但仍然希望用户能够以类似的方式在窗体之间切换。
关键组件
选项卡控件具有我们所需的所有功能、外观和感觉。我们需要的是一种将窗体链接到选项卡页面的方法。因此,我们创建了一个私有变量,作为 TabPage
对象来保存选项卡页面,基本上是窗体的描述。
我们如何将此选项卡页面添加到位于 MDI 窗体上的选项卡控件中?这时,属性 ParentForm
和 Friend
函数标识符就派上用场了。
当子窗体加载时,我们将一个变量设置为子窗体的 ParentForm
,这指向 MDI 窗体。在 MDI 窗体上,我们有两个函数,AddTabPage
和 RemoveTabPage
。
Friend Sub AddTabPage(ByVal tp As TabPage)
With TabControl1
.TabPages.Add(tp)
.SelectedTab = tp
End With
End Sub
Friend Sub RemoveTabPage(ByVal tp As TabPage)
TabControl1.TabPages.Remove(tp)
End Sub
使用 Friend
标识符允许从子窗体调用这些方法。因此,当子窗体加载时,我们调用 AddTabPage
,当窗体关闭时,我们调用 RemoveTabPage
。
Private Sub Form2_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
pForm = Me.ParentForm
pForm.AddTabPage(tp)
End Sub
Private Sub Form2_Closing(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles MyBase.Closing
pForm.RemoveTabPage(tp)
End Sub
最后一步
当选项卡控件页面更改时该怎么办?我们使用了子窗体的最小化和最大化。由于 MDI 子窗体和选项卡页面是并行管理的,因此 MDIChildren
集合的索引与选项卡页面对应。因此,我们只需要最大化与所选选项卡页面的索引对应的窗体。
Private Sub TabControl1_SelectedIndexChanged( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles TabControl1.SelectedIndexChanged
Dim i As Integer
If TabControl1.TabPages.Count > 0 Then
For i = 0 To Me.MdiChildren.Length - 1
If i = TabControl1.SelectedIndex Then
Me.MdiChildren(i).WindowState = FormWindowState.Maximized
Else
Me.MdiChildren(i).WindowState = FormWindowState.Minimized
End If
Next
End If
End Sub
结论
这似乎对我们有效,我们认为它非常简单,并且没有找到类似的东西。