我正在使用一组自定义控件(包括一个自定义表单),我重新绘制了自定义表单,使其具有metro风格的外观,并且基本上重新创建了表单的标题栏。将此表单设置为MDI容器会导致整个表单被重新涂成灰色,而不管表单的OnPaint处理程序中规定了什么。
我想创建一个多表单的应用程序,其中所有的表单不是主要的形式,出现在主要的形式(MDI窗口的想法)。我也见过一个SetParent API,它在不修改其视觉效果的情况下实现了类似的效果,然而,我以前用过这个来将cmd窗口绑定到窗体上,它并不总是可靠的。
在Winforms中使用MDI功能(如果是这样,我如何克服完全重新显色问题)或转储MDI并使用SetParent API修改子窗口的父窗口会更有效吗?
编辑:我已经决定去使用SetParent API,它每次工作,而不是我以前的经验与控制台窗口。然而,我需要创建窗口之前,我可以设置父,有时用户可以看到屏幕短暂闪烁之前,它被"钩"在我的主窗体。有没有一种方法可以"钩住"它而不让用户看到它?
如果你的问题是背景,那么这就是你所要做的,将表单的IsMDIContainer属性设置为true,然后循环MDI表单上的每个控件,让它们知道这是MDI背景,你可以把这段代码放在表单加载事件中,
Private Sub FormMDI_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each ctl As Control In Me.Controls
If TypeOf ctl Is MdiClient Then
ctl.BackColor = Me.BackColor
End If
Next ctl
End Sub
程序未运行时可能显示为灰色,但一旦程序运行,它将显示您想要的背景