【发布时间】:2017-01-10 01:01:06
【问题描述】:
我在 .NET 的 mdi 父窗体中隐藏处于最大化状态的 mdi 子窗体的标题栏时遇到问题。
这是我在设计和运行时所拥有的:
这是我的 MDI 子窗体的 new():
Public Sub New(ByRef pParent As Form)
MyBase.New()
Me.MdiParent = pParent
fParent = pParent
Me.Text = ""
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Me.WindowState = FormWindowState.Normal
Me.MinimizeBox = False
Me.MaximizeBox = False
Me.ControlBox = False
Me.ShowIcon = False
Me.ShowInTaskbar = False
Me.SizeGripStyle = Windows.Forms.SizeGripStyle.Hide
Me.Dock = DockStyle.Fill
End Sub
我试过FormWindowState.Maximized 和DockStyle.None,但结果是一样的。
在父容器上,从一个子容器变为另一个我使用这个函数:
Protected Sub SetActiveScreen(ByVal pChildForm As tWizardForm)
If pChildForm Is Nothing Then Exit Sub
If fActiveScreen Is pChildForm Then Exit Sub
Dim hg As New tHourglass
Try
fActiveScreen = pChildForm
fActiveScreen.Show()
fActiveScreen.BringToFront()
For Each aForm In MdiChildren
If aForm IsNot fActiveScreen Then aForm.Hide()
Next
fActiveScreen.Execute()
UpdateCaption()
Finally
hg.Dispose()
End Try
End Sub
在设计时我设置了父属性IsMdiContainer = True。
我哪里做错了或者我错过了什么? 加上子标题栏上的这种双按钮真的很奇怪。当我单击其中一个最大化按钮时,我最终得到相同的结果: .
无法点击生成的标题栏按钮。
感谢您的帮助!
【问题讨论】:
-
显然你不喜欢 MDI。所以不要使用它。该“子表单”可以是您停靠的用户控件。
-
@Hans Passant 这实际上可能是最好的做法......因为我永远不会同时显示多个“子表单”,我希望它们始终最大化。感谢您指出我看不到的明显内容!
-
我在 C# .NET 中遇到了同样的问题 ..
-
@StefanFalk:我遵循 Hans 的建议,将我的 MDI 子项转换为 UserControls(因此它们现在基本上只是面板)并且更容易处理(尤其是我只需要在时间并处于最大化状态)。