2

VB.NET MDI WinForms アプリがあります。私のユーザーは、フォーム クリープ (彼らが呼ぶように) について不満を漏らしてきました。これは、メイン MDI ウィンドウ内で特定のフォームを開くたびに、以前にロードした場所のわずかに右下に開く場所です。ウィンドウの左上から右下に向かって機能します。

私は、これが非常に苛立たしいことであることに同意する必要があります。これを防ぐ方法はありますか? フォームをロードするコードは次のとおりです。

frmPurchaseInvoiceSelect.Show()
frmPurchaseInvoiceSelect.MdiParent = Me

フォームの開始位置を「手動」に設定することでこれにある程度対処できますが、画面の左上で互いに直接重なって開くだけです。

他の SO ユーザーはこれに出くわしますか?

4

5 に答える 5

4

試す

frmPurchaseInvoiceSelect.StartPosition = FromStartPosition.CenterParent

常に Mdi 親の中心から開始します。

いくつかのオプションがありますが、フォームを開始する場所によって異なります。私はそれを試していませんが:

frmPurchaseInvoiceSelect.Location = windowPoint
frmPurchaseInvoiceSelect.Size = windowSize
frmPurchaseInvoiceSelect.StartPosition = FormStartPosition.Manual  

必要な場所からフォームを開始する必要があります。

于 2009-01-17T20:18:12.630 に答える
2

以下は私のためにそれを解決しました frmUser.StartPosition = FormStartPosition.Manual 再度開くと、「クリープ」が停止しました

于 2015-11-19T14:54:31.900 に答える
1

私の質問と、この問題の解決に役立つ可能性のある結果の回答を参照してください。この件に関する私の非常に詳細なブログエントリも参照してください。私のコードは Delphi で書かれていますが、概念を VB に移すことができるはずです。

于 2011-12-10T07:12:53.843 に答える
0

Mボーイ、

通常、MDI アプリケーションはウィンドウを中央に表示しませんが、SDI アプリケーションは中央に表示します。複数のウィンドウが開いている MDI アプリケーションでは、ユーザーは通常、目的のウィンドウをクリックして前面に表示できるように、各ウィンドウの端 (カスケード ビュー) を表示したいと考えています。これは通常、2 つの方法で実行できます。開いているウィンドウの数と、MDI フレームに対するそれらの位置を把握します。最後のウィンドウのすぐ下および右側に後続のウィンドウを開きます。この機能は通常、使用する言語またはライブラリ内で提供されます。2 番目の方法は、開いたウィンドウを必要な方向 (カスケード、タイル、またはレイヤー) で表示するための選択 (メニューまたはその他) を行うことです。前述したように、MDI 表示機能が言語/ライブラリ内で自動的に提供されない場合は、手動でコーディングする必要があります。

于 2009-01-17T20:59:20.503 に答える
0

使用する言語に関係なく、原因は同じです。最初の MDI ウィンドウを開くと、開始点は MDI フレームに対して 0,0 であるため、フレーム内の左上で開きます。ウィンドウを閉じて再度開くと、開始点は 0,0 ではなく、ウィンドウを開く方法 (カスケードなど) に基づいた他の値になります。閉まっている。ユーザーまたはツールが、開こうとしているウィンドウがフレーム内の唯一のウィンドウ インスタンスであるかどうかを確認していないために、問題が発生します。ウィンドウが唯一のインスタンスである場合は、0,0 で開きます。それ以外の場合は、他のウィンドウに対して適切な位置で開きます。

この機能は通常、使用している MDI ライブラリによって処理されます。そうでない場合は、手動でコーディングします。手動でコーディングするのに数行しかかからないため、実装は簡単です。

于 2009-01-17T20:03:58.870 に答える