2010-01-13 88 views
0

我正在使用使用MDI的.NET 2.0 WinForms应用程序。Windows XP中的MDI问题

当我在Windows 7下测试它时,它完美地工作,但是当我在Windows XP中安装完全相同的应用程序时,子窗口不再是MDI窗口。我可以将它们拖出父窗口。

有没有人对这种奇怪的行为有解释?

更新:它适用于Windows 7和Vista。它在XP上构建时工作在XP上,但构建项目并将其部署到XP后无法工作。这一点越来越陌生。

代码(我切出不处理表格的部分),如果孩子形式加载它们被分配MdiParent属性之前

Imports Model = TakeHomeModel 
Imports System.Windows.Forms 

Public Class MainForm 

Private WithEvents gebruikers As frmGebruikers 
Private WithEvents fotos As frmFotos 
Private WithEvents tweets As frmTweets 
Private rapport As frmReport 
Private zoeker As New frmZoek 

Private Sub GebruikersToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GebruikersToolStripMenuItem.Click 
    If gebruikers.Visible = False Then 
     gebruikers.Show() 
    Else 
     gebruikers.Hide() 
    End If 
End Sub 

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Me.Icon = My.Resources.appico 
    Model.InitDatabase(My.Application.Info.DirectoryPath & "\takehome.accdb") 
    gebruikers = New frmGebruikers 
    fotos = New frmFotos 
    tweets = New frmTweets 
    rapport = New frmReport 
    rapport.MdiParent = Me 
    gebruikers.MdiParent = Me 
    fotos.MdiParent = Me 
    tweets.MdiParent = Me 
    zoeker.MdiParent = Me 
End Sub 

Private Sub FotosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FotosToolStripMenuItem.Click 
    If fotos.Visible = False Then 
     fotos.Show() 
    Else 
     fotos.Hide() 
    End If 
End Sub 

Private Sub TweetsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TweetsToolStripMenuItem.Click 
    If tweets.Visible = False Then 
     tweets.Show() 
    Else 
     tweets.Hide() 
    End If 
End Sub 

End Class 
+2

你能告诉我们你的代码吗? – SLaks 2010-01-13 20:42:48

+0

完成后,我剪掉了不相关的部分(他们绝对不要触摸表单) – 2010-01-13 20:58:50

+1

顺便说一下,您可以通过编写'gebruikers.Visible = Not gebruikers.Visible'来切换表单的可见性。 – SLaks 2010-01-13 22:23:47

回答

0

一种可能性是。这可能发生在初始化过程中引用的子表单中的任何内容,无论是从外部还是作为“新”分配的结果。

+0

我会尝试,但为什么它在Windows 7中,而不是在XP中? – 2010-01-14 07:22:34

+0

好的,试过了,但是你不能在设计器中设置mdi父项。 – 2010-01-14 07:23:18

+0

你说得对 - 我已经编辑了答案。造成这种情况的原因之一可能是某些控件在初始化时触发了事件,而这种行为在Windows版本之间并不一致。相反,在加载主表单时分配mdiparent,您可以尝试在加载子表单时进行分配。 – xpda 2010-01-14 15:40:40

0

好的,更新。我尝试通过P/Invoke(获取MDICLIENT“窗口”的hWnd并将其设置为父级(SetParentA))并且没有区别(仍然在Win7上工作,而不是在XP上)。似乎XP真的不喜欢MDI。

0

我在使用Windows XP Windows Forms中的MDI子项时没有问题。我们广泛地做到这一点。

我会想象你有一些干扰MDI儿童在PC上工作的方式。

我会尝试在不同的运行(干净的安装如果可能的话),Windows XP机器,以消除相关的图形驱动程序,安装哪些影响窗口的布局等第三方工具的任何问题

是否使用标准的Windows表单还是您有使用影响MDI的第三方控件?例如。 Janus或Dev Express将MDI窗口转换为制表符,例如?

+0

没有第三方组件,它都是vanilla .NET 2.0。而XP安装非常干净,这是我的7的Windows XP模式。我有一位朋友在没有成功的情况下在一台虚拟机上安装了一个干净的XP系统进行测试。我还测试了Vista上的应用程序,它在那里工作得很好。 – 2010-01-14 09:28:03