在本练习中,您将创建一个具有多文档界面的应用程序,该界面由一个父表单和两个子表单组成。
打开项目并添加父窗体 1. 打开CalculateFlooringCostsMDI 目录中的CalculateFlooringCosts 项目。然后,查看地毯成本和硬木成本表格的代码,以便了解它们的工作原理。
向项目中添加一个窗体,并将该窗体的 IsMdiContainer 属性设置为 True 以将其标识为父窗体。调整窗体的大小,使其足以容纳多个子窗体,并使用项目设计器的应用程序页面将启动窗体更改为新窗体。将文件菜单添加到父窗体
将 MenuStrip 控件添加到父窗体。然后,使用菜单设计器将文件菜单添加到父窗体。此菜单应包括四个菜单项,它们显示地毯成本表单、显示硬木成本表单、关闭活动子表单以及退出应用程序。给每个菜单项一个适当的名称,包括菜单和菜单项的访问键,并在 Close 和 Exit 项之间包括一个分隔栏。
为“文件”菜单中每个项目的 Click 事件添加事件处理程序。New Carpeting Costs 和 New Hardwood Costs 项的事件处理程序应创建适当表单的新实例,将父表单设置为当前表单,并显示该表单。Close 项的事件处理程序应该关闭活动的子窗体(如果有的话)。Exit 项的事件处理程序应该从应用程序中退出。
将地毯成本和硬木成本窗体上的退出按钮更改为关闭按钮,并将这些窗体的 StartPosition 属性更改为 WindowsDefaultLocation。
测试应用程序以确保“文件”菜单中的项目按预期工作。将窗口菜单添加到父窗体
在文件菜单的右侧添加一个窗口菜单。然后,将三个项目添加到此菜单中,让用户以级联、垂直或水平布局排列表单。
为 Window 菜单中的每个项目指定一个适当的名称,然后为每个项目的 Click 事件添加一个事件处理程序,以适当地排列子窗体。
设置菜单条的 MdiWindowListItem 属性,以便窗口菜单将显示打开的子窗体的列表。
测试应用程序以确保“窗口”菜单中的项目按预期工作。向父窗体添加工具栏
将 ToolStrip 控件添加到父窗体。然后,在此工具栏上添加两个按钮,上面有“地毯成本”和“硬木成本”文本。请务必为这些按钮分配适当的名称。
为每个按钮的 Click 事件添加一个事件处理程序,该事件处理程序使用关联菜单的 Click 事件处理程序来显示表单。
测试应用程序以确保工具栏按钮正常工作。向父窗体添加状态栏
将 StatusStrip 控件添加到父窗体。然后,将一个 ToolStripStatusLabel 控件添加到状态栏。
向父窗体添加一个模块级变量来存储子窗体的计数,并赋予该变量初始值0。添加代码以在每次打开或关闭新窗体时增加或减小该变量的值。
添加一个名为 DisplayFormCount 的过程,将 ToolStripStatusLabel 控件的 Text 属性设置为“当前显示的子表单数:”,并附加当前表单计数。然后,添加代码以在加载表单时以及每次表单计数更改时调用此过程。
测试应用程序以确保正确显示表单计数。
这是我坚持的第 15 步和第 16 步。
我试过这个:
Private Sub DisplayFormCount(Sender As Object, e As EventArgs) Handles Me.MdiChildActivate
Dim activeForm As Form = Me.ActiveMdiChild
Me.sbMain.Items(0).Text = "Number of child forms currently displayed: " & Convert.ToString(Me.MdiChildren.Count)
End Sub
它在大多数情况下都有效。加载表单时,它显示为 0,然后添加一个表单将使计数增加 1。问题是当我关闭第一个子窗口时,它不会减去。之后所有窗口关闭将计数减少 1,当所有窗口关闭时,它仍然表示计数为 1。