调用FormClosed事件的方法
本文关键字:方法 事件 FormClosed 调用 | 更新日期: 2023-09-27 18:16:13
我有一个UserControl与一个组合框和一个按钮打开一个窗体在UserControl的顶部。在此表单中,您可以添加/编辑/删除用户控件组合框中的项。
我在UserControl的类中也有一个方法RefreshData()
,当你按下UserControl中的其他控件时,它刷新ComboBox中的数据(通过重建数据表)。-这个方法和组合框都有公共访问修饰符。(但不是静态的-这可能是问题所在?!)
RefreshData()
工作良好,当它被调用从自己的类(即,当它被同一UserControl上的控件调用)。但是,我还需要在用户控件的组合框中刷新数据,当我Close
编辑数据的表单。
-问题是FormClosing
处理程序正在调用RefreshData()
,但它实际上并没有刷新另一个表单上的数据。-我在FormClose
和FormClosing
事件处理程序中都尝试过。(我知道它正在被调用,因为我可以在调试时进入它)
这是我的代码
RefreshData()方法:
public void refreshdata()
{
SQLiteConnection sqlcon = new SQLiteConnection("data source =" + SqliteClass.dir + "''SupportDash.sqlite");
sqlcon.Open();
SQLiteCommand getdataDesc = new SQLiteCommand("SELECT ID, URLDescription, URLAddress, Type from URLS", sqlcon);
SQLiteDataReader reader;
reader = getdataDesc.ExecuteReader();
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("URLDescription", typeof(string));
dt.Load(reader);
//Description ComboBox
Report.ValueMember = "ID";
Report.DisplayMember = "URLDescription";
Report.SelectedValue = "ID";
Report.DataSource = dt;
sqlcon.Close();
}
从另一个Form调用它:
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(AddReport_Close);
void AddReport_FormClosing(object sender, System.Windows.Forms.FormClosedEventArgs e)
{
RRunner r = new RRunner();
r.refreshdata();
}
以及尝试两个事件处理程序,我也尝试过:(所有这些都在Form_Closing事件处理程序)
-
r.Invalidate(); Application.DoEvents();
-
r.Refresh();
我也试过清除UserControl上的所有控件,然后重新绘制它们:
foreach (Control ctrl in splitContainer1.Panel2.Controls)
{
splitContainer1.Panel2.Controls.Clear();
break;
}
RRunner rrunner = new RRunner();
splitContainer1.Panel2.Controls.Add(rrunner);
因为这些工作都没有,我相信我的问题在于我设置的"FormClosed"事件的eventhandler的方式,但我只是看不到我是错的?
您正在FormClosing
事件中创建新的用户控件RRunner
并调用refreshdata
。显然这是行不通的。您需要刷新现有的RRunner
。如果它被添加到表单中,那么下面的代码应该可以工作。
void AddReport_FormClosing(object sender, System.Windows.Forms.FormClosedEventArgs e)
{
RRunner r = this.Controls
.OfType<RRunner>()
.First();
r.refreshdata();
}
这样做的正确方法是将您的清理代码包含在FormClosing
事件处理程序中调用的方法中(在我看来,没有什么丑陋的)。调用应用程序。以老式的方式退出或关闭应用程序将导致生成此事件。触发清理方法。
private void Clicked(object sender, EventArgs e)
{
Application.Exit();
}
private void FormClosing(object sender, CancelEventArgs e)
{
Cleanup();
}
private void Cleanup()
{
// do cleanup here
}