john1990_1 Ответов: 3

В приложении C# Windows Forms, как вывести форму на передний план?


Когда пользователь свернул программу и нажимает F3, глобальный крючок клавиш получает пресс, и окно перевода должно быть сделано и выведено на передний план.

Они не всегда работают:

(f = new FormDefineWord()).показать();
f.WindowState = FormWindowState.Обычный;
f.BringToFront();
F. самый верхний=true;

Как заставить новую форму быть выдвинутой вперед и сфокусированной на ней?

BillWoodruff

"Они не всегда работают:" что именно вы наблюдаете, что приводит вас к этому выводу. Под "свернутой программой" вы подразумеваете, что основная форма была свернута и видна в виде значка в системном трее ? или ... ?

john1990_1

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

Я добавил Это.Самый верхний=истинный; и все же не всегда выводится на передний план.

Ramza360

Пытались ли вы специально вызвать фокус или активировать форму, скажем, после f.Topmost = true?

john1990_1

Рамза, ты прав, представь ответ, чтобы выбрать лучший ответ.

Ramza360

добавлен

3 Ответов

Рейтинг:
2

E.F. Nijboer

Попробуйте использовать таймер. Сначала только покажите окно и активируйте таймер для запуска примерно через 50 или 100 мс. Затем в событии таймера вы вызываете BringToFront или устанавливаете его на самый верхний или что вам больше нравится.

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

Удачи вам!


john1990_1

я пробовал использовать их это метод Швона в форме и до сих пор не работает

E.F. Nijboer

Но это не таймер. Форма должна быть полностью готова. Другой вариант-создать форму и скрыть ее (вместо того, чтобы воссоздавать ее)

john1990_1

не понял другого варианта

E.F. Nijboer

Теперь вы создаете новую форму FormDefineWord каждый раз, когда пользователь нажимает клавишу F3. Вы можете создать эту форму один раз и скрыть ее вместо повторного создания.

Рейтинг:
16

Ramza360

Добавление вызова Focus() должно сделать свое дело.

(f = new FormDefineWord()).Show();
f.WindowState = FormWindowState.Normal;
f.BringToFront();
f.Topmost=true;
f.Focus();


Рейтинг:
0

CHITRAKSH 2010

это работает для меня
Против 2010 года
предполагая, что это текущая форма, для которой необходим фокус.

this.Show();
     this.WindowState = FormWindowState.Normal;
     this.BringToFront();
     this.TopLevel = true;
     this.Focus();


CHill60

Единственное, что вы изменили по сравнению с принятым решением, опубликованным 3 года назад, - это изменить Topmost к TopLevel что без необходимости изменит поведение формы ОП