2010-01-13 5 views
0

Je travaille sur une application .NET 2.0 WinForms qui utilise MDI.Problèmes avec MDI dans Windows XP

Cela fonctionne parfaitement lorsque je le teste sous Windows 7, mais lorsque j'installe exactement la même application dans Windows XP, les fenêtres enfants ne sont plus des fenêtres MDI. Je peux les faire glisser hors de leur fenêtre parent.

Est-ce que quelqu'un a une explication pour ce comportement étrange?

Mise à jour: Cela fonctionne sur Windows 7 et Vista. Cela fonctionne sur XP quand il est construit sur XP, mais en construisant le projet et en le déployant à XP alors cela ne fonctionne pas. Cela devient étrange à la minute.

code (je coupe les parties ne traitant pas les formes)

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

Pouvez-vous nous indiquer votre code? – SLaks

+0

Fait, je découpe les parties non liées (elles ne touchent absolument pas les formes) –

+1

Par ailleurs, vous pouvez basculer la visibilité d'un formulaire en écrivant 'gebruikers.Visible = Not gebruikers.Visible'. – SLaks

Répondre

0

Une possibilité serait si les formulaires enfants sont le chargement avant d'être assigné à la propriété MdiParent. Cela peut arriver tout ce qui est à l'intérieur du formulaire enfant est référencé pendant le processus d'initialisation, que ce soit de l'extérieur ou possible comme résultat de la "nouvelle" affectation.

+0

Je vais essayer ça, mais pourquoi ça marche sous Windows 7 et pas sous XP? –

+0

Ok, essayé, mais vous ne pouvez pas définir le parent mdi dans le concepteur. –

+0

Vous avez raison - j'ai édité la réponse. L'une des raisons peut en être que certains contrôles ont des événements déclenchés à l'initialisation et que ce comportement n'est pas cohérent entre les versions de Windows. Au lieu d'affecter le mdiparent au chargement du formulaire principal, vous pouvez essayer de l'affecter au chargement des formulaires enfants. – xpda

0

Ok, mise à jour. J'ai essayé de le faire via P/Invoke (obtenir le hWnd de la "fenêtre" MDICLIENT et le définir comme parent (SetParentA)) et il n'y avait pas de différence (encore travaillé sur Win7, pas sur XP). Il semble que XP n'aime vraiment pas MDI.

0

Je n'ai aucun problème à utiliser les enfants MDI dans Windows XP Windows Forms. Nous le faisons intensivement.

J'imagine que vous avez quelque chose qui interfère avec la façon dont les enfants MDI travaillent sur ce PC.

Je voudrais essayer en cours d'exécution sur un autre (installation propre si possible), machine Windows XP pour éliminer tous les problèmes liés aux pilotes graphiques, l'installation d'outils tiers qui affectent la disposition des fenêtres, etc.

Utilisez-vous standard de Windows Formulaires ou avez-vous un contrôle tiers utilisé qui affecte MDI? par exemple. Janus ou Dev Express qui convertissent les fenêtres MDI en onglets, par exemple?

+0

Aucun composant tiers, tout est vanilla .NET 2.0. Et l'installation de XP est très propre, c'est le mode Windows XP de mon 7. J'ai eu un ami le tester sur une installation propre de XP dans une VM sans succès. J'ai également testé l'application sur Vista et cela a très bien fonctionné. –