0

子フォームを親に対して中央に配置するのに問題があります。ShowDialog を使用するか使用しないかから、あらゆる種類の奇抜な「フォームの位置を計算する」コードに至るまで、あらゆる種類の提案を試みてきました。

これはそれほど複雑ではないはずです。

とにかく、ここにいくつかのコードがあります。次のコードは、フォームをインスタンス化し、開くように要求する場所です。このthisコードの は MainForm です。

FormName myForm = new FormName();
myForm.ShowDialog(this);

StartPositionフォームをに設定しましCenterParentたが、MainForm を移動してフォームを再度開くと、それに沿って進みません。実際、何があってもその場所にとどまります。センタースクリーンでもありません!

フォームのコンストラクターでは、フォームの位置に関して何も設定しません。

また、フォームの Load メソッドでフォームの位置について何も設定しません。

助けてください!

編集:フォームのコンストラクターとロードメソッドをステップ実行して、終了前に救済され、正常に機能するかどうかを確認しました。

4

2 に答える 2

4

フォームのコンストラクターにコードを追加することは悪い考えであり、あらゆる種類の奇妙な動作を引き起こすことが判明しました。代わりに、Form Load イベントでフォームのコードを追加する必要があります。これが私の問題の根本でした。

于 2012-10-16T23:08:01.583 に答える
0

次のコードは私にとってはうまくいきます:

var MainForm = new Form();
var SubForm = new Form {
    StartPosition = FormStartPosition.CenterParent,
    Width = 200,
    Height = 200,
};

MainForm.MouseClick += (sender, args) => { SubForm.ShowDialog(MainForm); };
MainForm.Show();

MainForm をダブルクリックすると、メインフォームの中央に配置されたサブフォームが開きます。次に、サブフォームを閉じてメインフォームを移動すると、メインフォームを再度ダブルクリックすると、サブフォームが再びメインフォームの中央に表示されます。

于 2012-07-20T23:26:33.107 に答える