日期:2014-05-18  浏览次数:20875 次

从一个windowsform窗口打开另一个窗口,同时关闭此窗口。问题来了
从一个windowsform窗口打开另一个窗口,同时关闭此窗口。问题来了,我现在关闭第二个窗口时,程序不没有退出?我要怎么退出程序呢?
也就是关闭第一个窗口,

我是在登录的时候就隐藏掉此窗口,然后打开第二个窗口。请问有没有更好的方法实现这个功能啊?

------解决方案--------------------
第一个窗口只是隐藏啊,关闭窗口2当然不退出了

直接退出使用Applacation.Exit
------解决方案--------------------
另外,你可以在显示第二个窗口时,关闭第一个窗口也可以,调用:第一个窗口.Close();
------解决方案--------------------
通过关闭第二个窗口就退出程序 
在第二个窗口的Form2_FormClosed事件中加
 Application.Exit();

------解决方案--------------------
基本思路:把主窗体对象传给第二个窗体,主要代码如下:

private void button1_Click(object sender, EventArgs e)
{
Form1 frm = new Form1(this); // 启动第二个窗体,并传当前窗体
frm.Show();
this.Hide();
}

private Form mainForm;
public Form1(Form mainForm) // 第二个窗体的构造函数
{
InitializeComponent();
this.mainForm = mainForm;
}

private void button1_Click(object sender, EventArgs e)
{
mainForm.Close(); // 在第二个窗体中关闭主窗体
this.Close(); // 关闭自己
}

------解决方案--------------------
Dialog Form 区别在于楼主如何解决涉及问题

显然如何设计都不应该用隐藏的方式来达到关闭的目的

如果可以 建议楼主使用showDialog 或者将Form设为静态的 或Singleton模式

这样可以解决窗口混乱切资源共享问题
------解决方案--------------------
如果第二个窗口是主窗口,第一个是登录窗口,你可以在程序入口处(第二窗口)先调用第一窗口
C# code
 [STAThread] 
    static void Main()
    {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
   
      Form logo = new logo();
      //判断程序配置文件是否存在,如不存在则打开服务器设置窗口,如存在则判断是否可以连接到数据库服务器

      fun.Ini.path = System.IO.Directory.GetCurrentDirectory() + "\\config.ini";


      if (fun.Ini.IniReadValue("Assistant", "server").Trim() == "" | fun.Ini.IniReadValue("Assistant", "database").Trim() == "" | fun.Ini.IniReadValue("Assistant", "user").Trim() == "" | fun.Ini.IniReadValue("Assistant", "password").Trim() == "")
      {
        module.setServer s = new module.setServer();
        s.ShowDialog();
        if (s.DialogResult == DialogResult.OK)
        {
          //启动登录窗口
          logo.Show();
          Application.Run();
        }
      }
      else
      {
        if (fun.pub.ConnBool(fun.Ini.IniReadValue("Assistant", "server").Trim(), fun.Ini.IniReadValue("Assistant", "database").Trim(), fun.MySecurity.SDecryptString(fun.Ini.IniReadValue("Assistant", "user"), ""), fun.MySecurity.SDecryptString(fun.Ini.IniReadValue("Assistant", "password"), "")) == false)
        {
          if (System.Windows.Forms.MessageBox.Show("不能连接到服务器" + fun.Ini.IniReadValue("Assistant", "server").Trim() + ",或该服务器中未包含程序所需的数据库,\n请检查网络连接或重新设置服务器!\n现在要重设服务器吗?", "错误", System.Windows.Forms.MessageBoxButtons.OKCancel, System.Windows.Forms.MessageBoxIcon.Stop) == DialogResult.OK)
          {