проблема с приведением формы перед - PullRequest
0 голосов
/ 14 сентября 2011

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

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
  Form2 form2;
  form2 = new Form2();

  if (e.KeyCode.ToString() == "F1" && Application.OpenForms.OfType<Form2>().Count() <= 0)
    // the user pressed the F1 key
    form2.Show();
  else
  {
    form2.TopMost = true;
    form2.BringToFront();
    form2.Focus();
    form2.TopMost = false;
  }
}

private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
  Form2 form2;
  form2 = new Form2();
  if (Application.OpenForms.OfType<Form2>().Count() <= 0)
    form2.Show();
  else
  {
    form2.TopMost = true;
    form2.BringToFront();
    form2.Focus();
    form2.TopMost = false;
  }
}

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Это не работает, потому что вы забыли вызвать form2.Show () в предложении else. Код неправильный, вы не хотите создавать новый экземпляр Form2, если он уже существует. Кроме того, в Winforms есть ошибка, из-за которой Application.OpenForms теряет отслеживание экземпляров форм.

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

    Form2 form2;

    private void showForm2() {
        if (form2 == null) {
            form2 = new Form2();
            form2.FormClosed += delegate { form2 = null; };
        }
        form2.Show();
        form2.Focus();
    }

Вызовите showForm2 из ваших обработчиков событий.

1 голос
/ 14 сентября 2011

Просто позвоните form2.Show() и BringToFront.Вы должны объявить `new Form2 () 'один раз, хотя.

private Form2 form2;

private void ShowForm2()
{
  if (form2 == null)
  {
    form2 = new Form2();
    form2.FormClosed += delegate { form2 = null; };
  }
  form2.Show();
  form2.BringToFront();
}

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
  ShowForm2();
}

private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
  ShowForm2();
}

Из кода Ганса, я добавил делегата для обработки нулевой проблемы при закрытии формы и ее открытии снова.

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