簡體   English   中英

將表格放在前面的問題

[英]a problem with bringing form in front

我可以通過按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;
  }
}

這是行不通的,因為您忘記了在else子句中調用form2.Show()。 該代碼是錯誤的,如果一個已經存在,則您不想創建一個新的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。

只需調用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();
}

從漢斯的代碼中,我添加了委托以處理關閉表單並再次打開表單時的空問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM