web-dev-qa-db-ja.com

ShowDialogを使用してダイアログを表示するときに、ダイアログの位置を制御するにはどうすればよいですか?

これは非常に些細な問題ですが、私はそれを解決する方法を見つけることができないようです。私はこれに対する答えを知っているべきだと思うので私を困らせますが、私は間違った用語を探すか、間違ったメソッドとプロパティを調べています。

2つの場所から呼び出される構成ダイアログがあります。

最初は、正しく機能しているフォームのボタンからです-ご想像のとおりです。

2つ目は、システムトレイのnotifyIconのコンテキストメニューからですが、ここでは画面の左上に表示されます。理想的には、メイン画面の中央、またはシステムトレイの近くに表示されるようにします。

  • 私はLocationを設定しようとしましたが、これはdialog.ShowDialog()が呼び出されたときにオーバーライドされるようです。

  • dialog.ShowDialog(IWin32Window)オーバーロードを使用してみましたが、ウィンドウハンドルとしてnullを渡したくないようです。

  • 代わりにdialog.Show()を使用してみましたが、(これが原因で問題が発生している可能性があります)場所を設定しても、一貫した結果が得られないようです。

  • dialog.Parentプロパティの設定も試しましたが、もちろん例外が発生しました。

(うまくいけば)いくつかの答えを見ると答えが明白であることを理解するつもりですが、現時点では完全に行き詰まっています。

回答をありがとう-明らかだったと思いましたが、いつものように、間違ったルートを見下ろすことに固執しました。さらに厄介なのは、このプロパティをデザイナーから使用したことです。

37
ChrisF

Form.StartPosition プロパティをFormStartPosition.Manualに設定し、次に Form.Location プロパティを目的の場所に設定できます。 ShowDialogを呼び出すと、フォームが目的の場所に表示されます。

MyForm frm = new MyForm();
frm.StartPosition = FormStartPosition.Manual;
frm.Location = new Point(10, 10);
frm.ShowDialog();
48
heavyd

私はあなたがフォームを使用していると仮定します。その場合、Form.StartPosition列挙を使用できます。詳細については here および列挙動作 here を参照してください。

21
micahtan

フォームのStartPositionプロパティを試してください。

5
Max Schmeling