Вызов делегата пользовательского интерфейса приводит к тому, что пользовательский интерфейс скрыт - PullRequest
1 голос
/ 25 октября 2009

Предположим, у меня есть поток 1, поток пользовательского интерфейса главного окна и поток 2, поток пользовательского интерфейса входа в систему, который имеет модальную форму.

Теперь поток 1 выполняет кусок кода и хочет изменить элемент пользовательского интерфейса в форме входа в систему, чтобы он вызывал делегата для изменения чего-либо в потоке 2. Но когда это происходит, форма входа в систему скрывается за главным окном и у меня нет возможности вернуть его обратно. Выбор его на панели задач ничего не делает, а запись «Activate ()» в конце вызванного метода тоже ничего не делает.

Как я могу предотвратить скрытие пользовательского интерфейса потока 2?

Спасибо

Ответы [ 2 ]

5 голосов
/ 25 октября 2009

Звоните Фокус () в вашей форме входа в систему после того, как вы вызываете, чтобы обновить главное окно. Также может помочь установить родительское окно формы входа в систему как главное окно при его отображении.

(в вашем основном классе пользовательского интерфейса)

using (YourLoginForm f = new YourLoginForm()){

    YourLoginForm.Show(this)
}

Другим подходом может быть использование ShowDialog () вместо Show () , и ваша форма входа будет возвращать другой DialogResult в зависимости от того, будет ли вход был успешным или нет. ShowDialog () должен автоматически установить форму входа в систему, чтобы она была модальной и имела фокус.

0 голосов
/ 25 октября 2009

вау .... само собой. k, исчезающее второе окно - не вопрос

Но вопрос в комментарии все еще стоит .... Когда я делаю ShowDialog во втором потоке, как я могу предотвратить появление нового окна отдельно от главного окна? т.е. я не хочу, чтобы пользователь свернул главное окно, пока оно находится за вторым окном. Если другая программа появляется сверху и скрывает все, щелкнув по значку главного окна на панели задач, должно появиться второе окно с ним и т. Д.

...