首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

从一个windowsform窗口打开另一个窗口,同时关闭此窗口。有关问题来了

2012-03-28 
从一个windowsform窗口打开另一个窗口,同时关闭此窗口。问题来了从一个windowsform窗口打开另一个窗口,同时

从一个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)
          {


            module.setServer s = new module.setServer();
            s.ShowDialog();
            if (s.DialogResult == DialogResult.OK)
            {
              logo.Show();
              Application.Run();
            }
            else
            { Application.ExitThread(); }
          }
          else
          {
            Application.ExitThread();
          }
        }
        else
        {
          logo.Show();
          Application.Run();

        }
      }
    }


第二个窗口里验证登录
//验证通过
 this.Close();
Form Form1 = new Form1();
Form1.Show();

热点排行