因为我在子窗体里的FormClosing事件调用了主窗体的控件,然而发现,在关闭主窗体的时候,仍然会运行这个子窗体的Closing事件,请问怎么解决?
子窗体中: public delegate void MDIButton(string BT);
public MDIButton ShowButton;
public MDIButton AddButton;
private void Login_FormClosing(object sender, FormClosingEventArgs e)
{
string BT = "";
if (Program.Tools != null){ AddButton(BT); }
else { ShowButton(BT); }
}父窗体中: private void MDILogin_Click(object sender, EventArgs e)
{
Login f2 = new Login();
f2.ShowButton += new Login.MDIButton(ShowButton_Method);
f2.AddButton += new Login.MDIButton(AddButton_Method);
f2.Owner = this;
MLogin.Visible = false;
f2.ShowDialog();
} public void ShowButton_Method(string sButton)
{
MLogin.Visible = true;
} public void AddButton_Method(string aButton)
{
this.MTools.Nodes.Clear();
this.MTools.ImageList = this.MTicon;
TreeNode nodeParent;
for (int i = 0; i < Program.Tools.Count; i = i + 3)
{
nodeParent = this.MTools.Nodes.Add("", Program.Tools[i].ToString(), "TWait", "TSelect");
}
}
子窗体中: public delegate void MDIButton(string BT);
public MDIButton ShowButton;
public MDIButton AddButton;
private void Login_FormClosing(object sender, FormClosingEventArgs e)
{
string BT = "";
if (Program.Tools != null){ AddButton(BT); }
else { ShowButton(BT); }
}父窗体中: private void MDILogin_Click(object sender, EventArgs e)
{
Login f2 = new Login();
f2.ShowButton += new Login.MDIButton(ShowButton_Method);
f2.AddButton += new Login.MDIButton(AddButton_Method);
f2.Owner = this;
MLogin.Visible = false;
f2.ShowDialog();
} public void ShowButton_Method(string sButton)
{
MLogin.Visible = true;
} public void AddButton_Method(string aButton)
{
this.MTools.Nodes.Clear();
this.MTools.ImageList = this.MTicon;
TreeNode nodeParent;
for (int i = 0; i < Program.Tools.Count; i = i + 3)
{
nodeParent = this.MTools.Nodes.Add("", Program.Tools[i].ToString(), "TWait", "TSelect");
}
}
解决方案 »
- 请问定义var变量有什么好处,感觉倒不方便了啊
- C#怎样在winform中使用Process.Start的重载方法跳转页面并且给页面传值,在页面的一端也能接收验证该值
- 怎样才能学好面向对象,求指导
- VB没有学过,现在有段VB代码,改为C#,急求高手解决
- 使用vs2005将一个dataview绊定数据源,删除出错,提示必须声明变量,何故?
- 用win from 那么客户端怎么处理呀,都要安装.net框架吗?
- 接口的不完全实现
- 怎么理解接口?
- C#网页测试时直接显示代码。。。。望大伙指导...
- 谁能浅而易懂的讲解一下C#的完成端口
- wpf,如何设计win8风格的按钮
- 关于C# sealed类是否可以存在虚函数
主线程与子线程之间的关系。话说如果主线程关掉了 子线程还会继续工作吗?。==>>子窗体也会关闭吧
如果只是不想看到主窗体就把它的visualable 设成false可以不
就是主窗体关闭的时候,我想更新Access数据库,代码如下private void MDIBOX_FormClosing(object sender, FormClosingEventArgs e)
{
msCon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Program.Userset + @"\Set.mdb;Jet OLEDB:Database Password=qwe");
if (msCon.State == ConnectionState.Closed) msCon.Open();
string userSql = "update Person set UserName='" + System.Environment.UserName + "',Status='Offline'" + ",LastTime='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'";
msCmd = new OleDbCommand("", msCon);
msCmd.CommandText = userSql;
try
{ msCmd.ExecuteNonQuery(); }
catch (System.Exception E)
{ MessageBox.Show(E.ToString()); }
finally
{ msCmd.Dispose(); }
if (msCon.State == ConnectionState.Open) msCon.Close();
}发现走到下面这一步的时候就不往下走了if (msCon.State == ConnectionState.Closed) msCon.Open();
this.FormClosing-= new FormClosingEventHandler(Login_FormClosing);
下次关闭时不再有关闭方法,自然不会再触发你关闭主窗体时再次执行了这个窗体的关闭事件可能是因为内存中尚未将Login释放,你可以将“Login f2 = new Login();”这句换成“ using (Login f2 = new Login())“,再把后面的代码用大括号括起来。并且把”f2.Owner = this;“这句话删掉。
把主窗体关闭事件中更新的过程全部代码删除后,调试往下走,不会再执行登录窗体的关闭事件。
如果是这样,你调试看下那个msCon在删除前后有什么不一样的地方吧,光看你贴出来的代码,可能是Program.Userset 赋值在删除后没成功