在我的表單Load事件中,我檢查兩個條件並給出一條消息,如果其中一個或兩者都爲真,但每當隱藏主窗體,然後顯示消息再次出現並且這種情況發生在主表單被隱藏後顯示,因此Load事件每次都會被執行。如果條件爲真,我只希望該消息僅顯示一次。
這是我的Load事件代碼如何防止多次執行加載事件
private void Form1_Load(object sender, EventArgs e)
{
try
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
SqlCommand cmd = new SqlCommand("select clientData.Id,clientData.clientName,clientData.clientPhone,clientData.clientMobile,clientData.clientEmail,clientData.clientPage,marketingData.marketingBy,marketingData.marketingFor,marketingData.marketingCities,marketingData.marketingDurations,marketingData.marketingStartsFrom,marketingData.marketingEndsIn,marketingData.adDate,marketingData.adImage,priceAndProfits.marketingCost from clientData inner join marketingData on clientData.Id = marketingData.m_Id inner join priceAndProfits on clientData.Id = priceAndProfits.p_Id where marketingData.marketingStartsFrom >= getdate()", cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
if (dt.Rows.Count > 0)
{
upComing = true;
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
if (DateTime.Now.Day >= 25 && DateTime.Now.Day < 31)
{
try
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
SqlCommand cmd = new SqlCommand("select clientData.Id,clientData.clientName,clientData.clientMobile,clientData.clientPage,marketingData.marketingBy,priceAndProfits.marketingCost,priceAndProfits.marketingPrice,priceAndProfits.marketingProfit,priceAndProfits.dollarPrice,priceAndProfits.payment from clientData inner join marketingData on clientData.Id = marketingData.m_Id inner join priceAndProfits on clientData.Id = priceAndProfits.p_Id where clientData.isDebtor=1", cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt2);
if (dt2.Rows.Count > 0)
{
debt = true;
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
if (debt == true || upComing == true)
{
MessageBox.Show("يرجى مراجعة الإشعارات");
}
}
你是如何「隱藏」的形式?使用'Form.Hide()'?以及你如何再次展示它。你能分享這些代碼段嗎?因爲通常當你隱藏一個表單,然後再次顯示它時,它不應該觸發Load事件。 –
這是一個非常好的暗示,你在你的程序中有一個錯誤。像再次創建表單對象而不是使用現有的表單對象。使用調試器,在Load事件處理程序中設置中斷,並在第二次觸發時在Call Stack窗口中查看。它向您顯示惡碼所在的位置。不要使用Hide(),幾乎總是一個壞主意,考慮只是關閉一個你不再需要的表單。 [這段代碼](https://stackoverflow.com/a/10769349/17034)應該有助於阻止終止程序。 –
糟糕,我的意思是構造函數,而不是Load事件。 –