2012-04-04 20 views
2

はばかな質問のように見えますが、私は(ここで、「Me」はMDIParent形式で)次のことを試してみました:​​ MDIPhildフォームをMDIParentの右下に配置する方法は?

が、それは動作しません。

アイデア?

Dim frmNotif As New frmNotifica 
With frmNotif 
    .MdiParent = Me 
    .StartPosition = FormStartPosition.Manual 

    Dim leftStart As Integer = Me.ClientSize.Width - (.Width + (SystemInformation.Border3DSize.Width * 2)) 
    Dim topStart As Integer = Me.ClientSize.Height - (.Height + (SystemInformation.Border3DSize.Height * 2)) 

    .Location = New Point(leftStart, topStart) 
    .Show() 
End With 

あなたがパネルを持っているかのToolStripがMDIParentに追加した場合、あなたがしなければならない:これは動作するはずです、あなたは「空」MDI親フォーム(なしパネルまたはToolStripsドッキング)を持っていると仮定

+0

「うまくいかない」というのはひどい診断です。ここでの典型的な問題は、Aeroがウィンドウの周りに置く太い枠です。 appcompatの理由で、ウィンドウのサイズが間違ってしまいます。そのためのクリーンな修正はありません。サイズに4を加えることは、Q&Dの修正です。 –

+0

「動作しない」とは、意図したとおりに配置されていないことを意味します。 –

答えて

2

あなたの方程式にもあてはまります。

+2

2つの問題:このコードは、フォームのLoadイベントハンドラで実行する必要があるため、自動再スケーリングが完了します。また、Border3DSizeのハックはXPでは動作しません。また、Aeroがオフになっている場合もあります。 –

+0

多くの感謝!これは私の実際の問題を解決します。私がすぐに抱える問題は、右下隅に表示したい特定のフォームがボーダーレスな場合はどうなりますか? SystemInformation.Border3DSizeのように見えるのは、すべてのシステムのフォームの境界線の標準サイズです。そこに表示したいフォームのすべてのタイプをチェックする必要があります:-) –

+0

@AndreaAntonangeli Hans Passantのコメントに注意してください。この解決策はすべての状況で機能しないかもしれません。子フォームの配置がアプリケーションにとって重要である場合、MDIはそれにアプローチする最善の方法ではないかもしれません。 – LarsTech

関連する問題