Как я могу управлять расположением диалога при использовании ShowDialog для его отображения?
Это очень тривиальная проблема, но я не могу найти способ ее решения. Это раздражает меня, потому что я чувствую, что должен знать ответ на этот вопрос, но я либо искал неправильные термины, либо искал неправильные методы и свойства.
У меня есть диалог конфигурации, который вызывается из двух мест.
Первый - это кнопка, которая работает правильно - как и следовало ожидать.
Второй из контекстного меню на notifyIcon в системном трее, но здесь он отображается в верхнем левом углу экрана. В идеале я бы хотел, чтобы он отображался в центре экрана основного экрана или, возможно, рядом с системным лотком.
-
Я попытался установить Location
, но это, кажется, переопределено при вызове dialog.ShowDialog()
.
-
Я попытался использовать перегрузку dialog.ShowDialog(IWin32Window)
, но мне не показалось, что я передаю null
в качестве дескриптора окна.
-
Я попытался использовать dialog.Show()
вместо этого, но (и это то, где я мог бы ошибиться), установка местоположения, похоже, не дает согласованных результатов.
-
Я даже попытался установить свойство dialog.Parent
, которое, конечно же, вызвало исключение.
Я просто знаю, что я пойму, что ответ очевиден, когда я (надеюсь) вижу некоторые ответы, но на данный момент я полностью застрял.
Спасибо за ответы - как я подозревал, это было очевидно, но, как обычно, я застрял в том, что смотрел вниз по неправильному маршруту. Еще более неприятно то, что я тоже использовал это свойство у дизайнера.
Ответы
Ответ 1
Вы можете установить свойство Form.StartPosition
в FormStartPosition.Manual
, а затем установить Form.Location
в нужное место. Когда вы вызываете ShowDialog
, форма должна отображаться в нужном месте.
MyForm frm = new MyForm();
frm.StartPosition = FormStartPosition.Manual;
frm.Location = new Point(10, 10);
frm.ShowDialog();
Ответ 2
Я предполагаю, что вы используете форму, и в этом случае вы можете использовать перечисление Form.StartPosition. Вы можете узнать об этом здесь и поведение перечисления здесь.
Ответ 3
Попробуйте свойство StartPosition в форме.