[英]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.