Как я могу контролировать расположение диалога при использовании ShowDialog для его отображения? - PullRequest
31 голосов
/ 16 июня 2009

Это очень тривиальная проблема, но я не могу найти способ ее решения. Меня это раздражает, потому что я чувствую, что должен знать ответ на этот вопрос, но я либо ищу неправильные термины, либо ищу неправильные методы и свойства.

У меня есть диалоговое окно конфигурации, которое вызывается из двух мест.

Первая - кнопка в форме, которая работает правильно - как и следовало ожидать.

Второй из контекстного меню на notifyIcon в системном трее, но здесь он появляется в левом верхнем углу экрана. В идеале мне бы хотелось, чтобы он отображался по центру основного экрана или, возможно, рядом с системным треем.

  • Я пытался установить Location, но, кажется, он перезаписывается при вызове dialog.ShowDialog().

  • Я пытался использовать перегрузку dialog.ShowDialog(IWin32Window), но мне не показалось, что я передаю null в качестве дескриптора окна.

  • Я пытался использовать dialog.Show() вместо этого, но (и здесь я могу ошибаться) установка местоположения не дает согласованных результатов.

  • Я даже пытался установить свойство dialog.Parent - что, конечно, вызвало исключение.

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

Спасибо за ответы - как я и подозревал, это было очевидно, но, как обычно, я застрял в том, чтобы смотреть не по тому маршруту. Еще более раздражает то, что я использовал это свойство и из конструктора.

Ответы [ 3 ]

43 голосов
/ 16 июня 2009

Можно установить для свойства Form.StartPosition значение FormStartPosition.Manual, а затем установить для свойства Form.Location желаемое местоположение. Когда вы звоните ShowDialog, форма должна появиться в нужном месте.

MyForm frm = new MyForm();
frm.StartPosition = FormStartPosition.Manual;
frm.Location = new Point(10, 10);
frm.ShowDialog();
21 голосов
/ 16 июня 2009

Я предполагаю, что вы используете форму, и в этом случае вы можете использовать перечисление Form.StartPosition. Вы можете найти больше об этом здесь и поведении перечисления здесь .

4 голосов
/ 16 июня 2009

Попробуйте свойство StartPosition в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...