Как заставить детей сосредоточиться? - PullRequest
0 голосов
/ 28 декабря 2011

Я попробовал это в форме 2:

   //... 

    var form3 = new Form3(this);

                        if (System.Windows.Forms.Application.OpenForms[form3.Name] == null)
                        {
                            form3.Show();
                        }
                        else
                        {
                            System.Windows.Forms.Application.OpenForms[form3.Name].Focus();
                        }

, а затем в форме 3:

 public partial class Form3 : Form
    {
        public Form2 _emailForm;

        public Form3 (Form2 emailForm)
        {
            _emailForm = emailForm;
            InitializeComponent();
        }

    public void foo()
        {
           _emailForm.ForceFocus(); 
           this.Close();
        }
}

, но форма не сфокусирована.кто-то может указать мою ошибку?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 19 июля 2014

Если вы абсолютно хотите, чтобы пользователь выполнил действие в Form2 до того, как снова сможет использовать Form1, используйте .ShowDialog () вместо .Show ()

0 голосов
/ 28 декабря 2011

Вы можете упростить это так:

public Form1(Form parent)
{
    InitializeComponent();
    _parent = parent;
}

private void button1_Click(object sender, EventArgs e)
{
    if (_parent != null)
        _parent.Focus();
}

Надеюсь, это ответит на ваш вопрос. В противном случае, пожалуйста, оставьте комментарий.

EDIT

Оба Show() и BringToFront() используют SafeNativeMethods.ShowWindow(...) для внутреннего использования. Так что вы не заметите никакой разницы. Однако я думаю, что более распространенным является использование Show() или Activate() на Form объектах и ​​BringToFront() на Control объектах, которые являются частью других Control объектов.

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