Проблемы с MDI в Windows XP - PullRequest
0 голосов
/ 13 января 2010

Я работаю над приложением .NET 2.0 WinForms, которое использует MDI.

Он отлично работает, когда я тестирую его под Windows 7, но когда я устанавливаю точно такое же приложение в Windows XP, дочерние окна больше не являются окнами MDI. Я могу перетащить их из родительского окна.

У кого-нибудь есть объяснение этому странному поведению?

Обновление : работает в Windows 7 и Vista. Он работает на XP, когда он построен на XP, но собирая проект и разворачивая его на XP, он не работает. С каждой минутой это становится все более странным.

Код (я вырезал части, не связанные с формами)

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

Ответы [ 3 ]

0 голосов
/ 14 января 2010

Ок, Обновление. Я попытался сделать это через P / Invoke (получить hWnd «окна» MDICLIENT и установить его как родительский (SetParentA)), и не было никакой разницы (все еще работал на Win7, а не на XP). Кажется, что XP просто не нравится MDI.

0 голосов
/ 14 января 2010

У меня нет проблем с использованием MDI-детей в Windows XP Windows Forms. Мы делаем это экстенсивно.

Я бы предположил, что у вас есть что-то, что мешает работе детей с MDI на этом ПК.

Я бы попробовал запустить на другом (если возможно, чистой установке) компьютер с Windows XP, чтобы устранить любые проблемы, связанные с драйверами графической подсистемы, установкой сторонних инструментов, влияющих на расположение окон и т. Д.

Используете ли вы стандартные Windows Forms или у вас есть сторонний элемент управления, который влияет на MDI? например. Janus или Dev Express, которые конвертируют окна MDI во вкладки, например?

0 голосов
/ 14 января 2010

Одна из возможностей может быть, если дочерние формы загружаются до того, как им назначено свойство mdiparent. Это может произойти все, что находится внутри дочерней формы, на которую ссылаются в процессе инициализации, либо извне, либо, возможно, в результате в качестве «нового» назначения.

...