Отображение формы через Form.Show не уделяется внимание? - PullRequest
1 голос
/ 17 ноября 2010

У меня две формы, Form1 и UserControl, в котором размещается Form2.В этом UserControl в Form1 я звоню Form2.Show();.Я также пытался Form2.Show(this);.В любом случае, внимание не уделяется форме.Мне нужно щелкнуть один раз в новой форме, чтобы выделить ее, а затем я могу щелкнуть элементы в этой форме.

Я подумал, что элемент управления возвращается к моему основному элементу управления / форме, и, таким образом, фокус становитсяпотерял.Так что я жду, пока Форма 2 будет закрыта через:

      while (form2.Visible == true)
      {
          System.Threading.Thread.Sleep(100);
          Application.DoEvents();
      }    

Это похоже на работу.Однако после того, как я закрыл форму, теперь верно обратное.Form1 не уделяется внимание (даже если я звоню this.Focus()), пока я не нажму один раз в главном окне формы.

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

Ответы [ 4 ]

1 голос
/ 17 ноября 2010

используйте this.Activate(); вместо this.Focus();

1 голос
/ 17 ноября 2010

Вам, вероятно, следует использовать .ShowDialog(), это также можно расширить, чтобы дать свой ответ, если пользователь выполнил операцию Form2 правильно или прервал ее раньше.

Это делает форму заблокированной в фокусе вперед и остановит выполнение кода в первой форме, пока эта форма не будет закрыта.

0 голосов
/ 25 ноября 2010

Это произошло из-за того, что я переопределял WndProc для отображения формы. Когда я получал сообщение CBN_DROPDOWN, я отображал форму. Я исправил это, вместо этого вызвав Invoke'ом метод, который показывает форму, и он исправил ее.

case CBN_DROPDOWN:
    Invoke(new MethodInvoker(Show_DropDown));
    return;
0 голосов
/ 17 ноября 2010

Не уверен, что я полностью следую, но из вашего UC попробуйте открыть Form2 следующим образом:

form2.Show(Parent);

Это должно указать родительскую форму UC как владельца form2.

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