![](/img/trans.png)
[英]Why does C# SqlConnection.StateChange event NOT get fired in real time when SQL Server database is not available?
[英]Why FormShown event does not get fired in C#?
我是C#的新手,我正在使用Windows窗體。 我有Form1
和Form2
。 在form1
我使用以下代碼來顯示form2
:
Form2 frm2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
frm2.Show();
}
我想要的是:每次顯示Form2
時我想做一些活動。 我將messageBox
放在Form2Shown
事件中(用於測試),但它只被觸發一次,下次我顯示Form2
它永遠不會被觸發。 我也嘗試使用formLoad
但它只被觸發一次,下次我顯示form2
它永遠不會被解雇。 我知道我可以使用frm2.ShowDialog()每次觸發顯示的事件但我不想出於某些原因。
private void Form2_Shown(object sender, EventArgs e)
{
MessageBox.Show("Form2 is shown"); // this gets fired only once when form2 is shown.
// when I show form2 again it does not get fired.
}
private void button_Hide_Form2_Click(object sender, EventArgs e)
{
// this is in form2
Hide();
}
我的問題是:每次顯示form2
任何人都知道如何觸發事件? 我很高興獲得一些新想法來解決這個問題。 謝謝
來自MSDN
Shown事件僅在第一次顯示表單時引發; 隨后最小化,最大化,恢復,隱藏,顯示或無效和重新繪制將不會引發此事件。
在MSDN上,您可以看到引發了哪些事件。 並選擇一個符合您要求的。
一些例子。
Form1 - 兩個按鈕,顯示和隱藏
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Form2 frm = new Form2();
private void btnShow_Click(object sender, EventArgs e)
{
frm.Show();
}
private void btnHide_Click(object sender, EventArgs e)
{
frm.Hide();
}
}
Form2 - 顯示時顯示msgbox。 我改變形式關閉行為隱藏形式不破壞。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_VisibleChanged(object sender, EventArgs e)
{
if(this.Visible == true)
MessageBox.Show("Hey");
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
}
我已經插入一些評論來了解最新情況:
// You can use auto-property in here.
private Form2 frm2 { get; set; }
private void button1_Click(object sender, EventArgs e)
{
// Create a new instance before it is shown.
NewForm();
frm2.Show();
}
// Creates a new instance and hooks the event.
private void NewForm()
{
frm2 = new Form2();
// When creating an instance, hook the load event.
frm2.Load += Form2_Load;
}
// Will be triggered when show is called.
private void Form2_Load(object sender, EventArgs e)
{
// Do stuff
}
如果你只需要Form2
類中的Form2_Shown
,你應該重寫OnActivated()
而不是使用EventHandler:
protected override void OnActivated(EventArgs e)
{
MessageBox.Show("Form2 is shown");
}
OnActivated方法還允許派生類在不附加委托的情況下處理事件。 重寫此方法是在派生類中處理事件的首選技術。
https://msdn.microsoft.com/en-us/library/system.windows.forms.form.onload(v=vs.110).aspx
我找到了答案。 我們使用Form2_VisibleChanged事件:
private void Form2_VisibleChanged(object sender, EventArgs e)
{
if(this.Visible==true)
{
MessageBox.Show("Form is visible");
}
else
{
MessageBox.Show("Form is hiding");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.