C#调用子窗体后关闭自身(父窗体)

时间:2021-12-20 23:51:35
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭?
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗?

73 个解决方案

#1


show子窗体同时close父窗体不行么

#2


这种情况貌似不行。因为主窗体是程序入口。你关了主窗体,子窗体就关了。
只能隐藏。

#3


将子窗体变量定义在父窗体的外边,使用时父窗体实例化,不用时在某个地方关闭或者隐藏

#4


引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭? 
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗?


可以如下做。
 static void Main()
        {
          FrmLogin frmLogin = new FrmLogin();
            frmLogin.ShowDialog();
            if (frmLogin.DialogResult == DialogResult.OK)
            {
                Application.Run(FrmMain());
            }
            else
            {
                Application.Exit();
            }
                 }
在frmLogin的登录按钮里写如下代码
private void cmdLogin_Click(object sender, EventArgs e)
 {
    //登录的参数判断
   if(登录成功 )                 
       {          this.DialogResult = DialogResult.OK  
                 this.Close();
        }
   else
      {
           return;
           
      }
}

#5



                this.Hide();//隐藏登录画面
                fromObj.ShowDialog();//显示子form
                //显示登录画面
                this.Show();

#6


登陆画面这么些就可以。登陆显示登录后的主画面,主画面关闭后再重新显示登陆画面。

#7


用Application.Run(new 新登陆窗口());,,新开个线程用来显示新窗口,然后你就可以this.Dispose();掉自身了

#8


和楼主有同样的困扰!
感觉楼上的几位说的方法好像不好用。

我想实现 从  主界面->分界面(主界面不显示)->主界面

好想很简单,但就是实现不了,等大侠来帮助!!!

支持楼主!!!

#9


应该不可以吧..不过隐藏主界面不就能达到一样的效果吗?

#10


引用 8 楼 love_aiqiu_123 的回复:
和楼主有同样的困扰! 
感觉楼上的几位说的方法好像不好用。 

我想实现 从  主界面->分界面(主界面不显示)->主界面 

好想很简单,但就是实现不了,等大侠来帮助!!! 

支持楼主!!!

怎么就不行呢?
//验证密码通过后
frmMain _frmMain = new frmMain();
 _frmMain.Show();
//弹出manageForm后,隐藏form1
this.Hide();

#11


抱歉我太想当然了,不能通过
Application.Run(new Form2());
this.Dispose();
的方法来达到LZ说的效果。会提示无法从单一线程中开启消息循环……

LZ可以新建一个线程用来显示Form2,Form1的消息循环线程就可以结束了

private void Button1_MouseClick(object sender, MouseEventArgs e)
{
    Thread t = new Thread(new ThreadStart(delegate { Application.Run(new Form2()); }));
    t.Start();
    this.Dispose(true);
}

#12


 


Form2 form=new Form2();
form.showDialog();

#13


引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭? 
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗?


如果两个窗体是父子窗体的关系,那么父窗体关闭,子窗体也会关闭的。就想楼房,若果一楼倒塌了,那二楼肯定也就没了。
你说的可以不要把两个窗体设为父子窗体的关系,彼此间独立。就很容易实现了。

#14


隐藏

#15


也可以在Main窗体Load中,调用Login。

#16


引用 14 楼 amao521 的回复:
隐藏

up

#17


依照楼主的意思,这样貌似不行吧?把父窗口关闭之后 ,子窗体也就关闭了。你可以 ,hide或者是 this.Visible=false;

#18


up

#19


子窗体关闭父窗体必然是不行的。一个窗体的析构过程在是这样的,先检查是不是new出了子窗体,如果是,则先调用子窗体的析构,即关闭子窗体,然后在调用自己的析构函数,将自己关闭。
这样理解来看,如果子窗体想要关闭父窗体,那么就得先关闭自己才行,本身来看就矛盾了。
我有一个例子:使用了三个窗体,
A:第一个启动的窗体,显示程序版本信息。在Form_load事件中显示Login画面(B窗体)
B:Login窗体
C:程序主窗体。Login成功后进入。主窗体显示的时候,A和B都要隐藏。
怎么做呢?
有两种办法,第一个使用委托。这个稍微难一点,但是也可以实现,我已经试验成功(当然不是试图去关闭父窗体,只是让它隐藏不显示)
方法2:在B窗体中保存A窗体的实例,(即:在B Show之前的构造B时,将A本身传给B),同样C中包含B的实例
       在B窗体的登陆按钮压下,并且成功登陆后使用下面的代码:
        this.WindowState = FormWindowState.Minimized;

        this.sbi.WindowState = FormWindowState.Minimized;//sbi 是A窗体的实例
 
      当然这样还没有隐藏掉,你还需要在A和B窗体的Resize事件中写代码
       if (this.WindowState == FormWindowState.Minimized)
             {
                 this.Visible = false;
                 // this.SendToBack();
             }
     }
到此实现了隐藏的功能,下面讲解怎么实现关闭的功能。
      在C的Closing事件中,关闭B(C中包含B的实例),在B的Closing事件中关闭A(B中包含A的实例)

#20


隐藏 - -!

#21


回帖是一种高尚的情操

#22


先把那个主窗体隐藏了,代码是this.hide();
显示那个窗体,在把那个窗体实例话了,代码是 例如:form1 cn=form();
在把你想显示的那个窗体显示就行了,代码是 cn.show();
就这样ok了

#23


学习19楼

#24


无法关闭父级窗体,要么hide要么通过main函数来启动,要么你就在进了主窗体然后弹出登录窗体。

#25


在主程序窗体的模块(FM)外部模块(FW)中要调用 FM中的东西,设定一个全局的量,通常为静态,把FM的引用传递给静态量,引用它就可.

#26


Main方法不要写在主窗口中,其实可以把两个窗口程序看成独立的对象就可以了,

如 progame.cs中写main方法
Main()
{
   LoginFrom lf = new LoginFrom();
   //这里对lf进行判断
   if (OK)
   {
     Mainform mf= new Mainform();
     mf.show;
   }
}

vs2005 自动创建的工程,都已经把Main方法拿到一个独立的cs文件里面了,Program.cs

#27


我刚刚解决的问题哈
你参考一下! 比较简单 实用吧

主窗体为程序入口,登录窗体中,登陆成功后先不要把它dispose(),暂时隐藏.由主窗体来解决它!

     
 
            //通过登录窗体进行登录
            Login login = new Login();
            login.ShowDialog();
           
            if (login.IsDisposed)
            {
                this.Dispose();
            }

      //登录后注销掉登录窗体
            //label1.Text = login.Controls["textBox1"].Text.ToString();
          login.Dispose();


#28


隐藏,或者不要建立父子关系。

#29


引用 11 楼 tsorgy 的回复:
LZ可以新建一个线程用来显示Form2,Form1的消息循环线程就可以结束了 

C# code
private void Button1_MouseClick(object sender, MouseEventArgs e)
{
    Thread t = new Thread(new ThreadStart(delegate { Application.Run(new Form2()); }));
    t.Start();


哇,能想到用线程,太牛了,我也得试试~~

#30


5楼的做法不错
不过昨天看MSDN的帖子
说窗体显示为对话框时,点击关闭按钮,不会调用对话框窗体的Close()方法
并且要在处理完对话框的DialogResult后,调用对话框的Dispose()方法来释放对话框窗体
占用的资源

Form login = new Form();
login.ShowDialog();
if ( login.DialogResult == DialogResult.OK)
{
      login.Dispose();
      Application.Run(new mainForm());
}
else
{
      login.Dispose();
}

我在窗体的事件处理程序里是直接这样些的
private void okButton_Click(object sender, EventArgs e)
{
     //省略若干验证代码
     this.DialogResult = DialogResult.OK;
}

private void cancelButton_Click(object sender,EventArgs e)
{
     this.DialogResult = DialogResult.Cancel;
}

在事件处理程序中没有调用Close()方法    尽管调用了好像也没什么区别
但是参照文档   还是这样写了


     

#31


还得在 login窗体的 closing事件中 加一行代码 this.dispose();
因为点LOGIN右上角的x时也要能退出,而不加载主窗体!!

#32


引用 27 楼 seewp 的回复:
我刚刚解决的问题哈 
你参考一下! 比较简单 实用吧 

主窗体为程序入口,登录窗体中,登陆成功后先不要把它dispose(),暂时隐藏.由主窗体来解决它! 

     
C# code 
            //通过登录窗体进行登录
            Login login = new Login();
            login.ShowDialog();
           
            if (login.IsDisposed)
            {
                this.Dispose();
            }

      …



还得在 login窗体的 closing事件中 加一行代码 this.dispose(); 
因为点LOGIN右上角的x时也要能退出,而不加载主窗体!!

#33


引用 4 楼 abcyzq 的回复:
引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭? 
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗? 
 

可以如下做。 
static void Main() 
        { 
          FrmLogin frmLogin = new FrmLogin(); 
            frmLogin.ShowDialog(); 
            if (frmLogin.DialogResult == DialogResult.OK) 
   …

4楼的方法可以

#34


Application的run有几种重载.
其中一种是Application.Run(Form)
这代表一旦Form被关闭就自动退出消息循环.
VS IDE默认生成的代码就是调用的这个重载.

而LZ需要的是关闭程序启动时显示的Form1(Application.Run里的那个)
显示Form2且不中断消息循环.可以这样修改Main函数:
Form1 frm = new Form1();
frm.Show();

Application.Run();

这样你在关闭Form1后就不会退出消息循环了.但是缺点就是你的Form2关闭
后消息循环也不会退出.程序的退出需要你自己调用Application.Exit();

#35


        /// <summary>
        /// 用户登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void loginBtn_Click(object sender, EventArgs e)
        {
            if (UseNameTxt.Text.Trim().Length == 0)
            {
                UseNameTxt.Focus();
                lblUse.Visible = true;
            }
            //string role = myUserCheck(UseNameTxt.Text, PwdTxt.Text);
            string role = "test";
            if (role.Length != 0)
            {
                Thread th = new Thread(new ThreadStart(delegate { Application.Run(new FrmMain(role)); }));
                th.Start();
                this.Dispose();
                this.Close();
            }
        }

        /// <summary>
        /// 关闭登录画面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CloseBtn_Click(object sender, EventArgs e)
        {
            this.Dispose();
            this.Close();
        }

#36


上面的方法和下面的方法全部都可以实现登录画面的效果!并且已经实际运行过了。
==========================================================================
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            FrmLogin frmLogin = new FrmLogin();
            frmLogin.ShowDialog();
            
            if (frmLogin.DialogResult == DialogResult.OK)
            {
                Application.Run(new FrmMain(frmLogin.Role));
            }
            else
            {
                frmLogin.Dispose();
                frmLogin.Close();
            }
        }
=====================================================================
        /// <summary>
        /// 用户登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void loginBtn_Click(object sender, EventArgs e)
        {
            if (UseNameTxt.Text.Trim().Length == 0)
            {
                UseNameTxt.Focus();
                lblUse.Visible = true;
            }
            //role = myUserCheck(UseNameTxt.Text, PwdTxt.Text);
            role = "test";
            if (role.Length != 0)
            {
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            return;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CloseBtn_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
        }

#37


只能隐藏...

#38


公司招聘高级C#工程师
3年以上C#.NET技术路线经验(开发、分析、设计)、1年以上的软件系统设计经验,熟悉UML建模,

珠海政采软件技术有限公司北京分公司
地址:北京市海淀区中关村软件园
网址:http://www.gpcsoft.com
邮箱:wangyq@gpcsoft.com;evalywang99@yahoo.com.cn

#39


A窗体调用B窗体,A窗体就变成了B窗体的父窗体,B依赖于A窗体而存在,A死了,B没有了依赖体就会死亡。
可以在生成B的时候隐藏A,
有时候在项目中,窗体时相对的,A是父窗体,有时候可以看做子窗体,让B这个子窗体看做父窗体来调用A

#40


经本人验证,11楼的写法可以,而且本人认为较好!

#41


顶下11楼的,方法不错,我是用你的方法实现的

#42


顶11楼,不错,这是一个很好的思路

#43


顶个 貌似11楼方法不错

#44


form1 f1=new form1();
f1.show();
this.Hide();

#45


顶11楼,貌似挺好

#46


11楼不错

#47


http://zhidao.baidu.com/question/135595846.html

#48


十一楼的那个方法不能从子窗体重新生成主窗体。
我是想弄一个字窗体添加数据,然后重新调回主窗体刷新页面。可是主窗体关了之后貌似无法再开启。

#49


引用 4 楼 abcyzq 的回复:
引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭?
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗?


可以如下做。
 static void Main()
  {
  FrmLogin frmLogin = new FrmLogin();
  frmLogin.ShowD……


这个挺好的,难道你还有其它的需求 ?

#50


学习了

#1


show子窗体同时close父窗体不行么

#2


这种情况貌似不行。因为主窗体是程序入口。你关了主窗体,子窗体就关了。
只能隐藏。

#3


将子窗体变量定义在父窗体的外边,使用时父窗体实例化,不用时在某个地方关闭或者隐藏

#4


引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭? 
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗?


可以如下做。
 static void Main()
        {
          FrmLogin frmLogin = new FrmLogin();
            frmLogin.ShowDialog();
            if (frmLogin.DialogResult == DialogResult.OK)
            {
                Application.Run(FrmMain());
            }
            else
            {
                Application.Exit();
            }
                 }
在frmLogin的登录按钮里写如下代码
private void cmdLogin_Click(object sender, EventArgs e)
 {
    //登录的参数判断
   if(登录成功 )                 
       {          this.DialogResult = DialogResult.OK  
                 this.Close();
        }
   else
      {
           return;
           
      }
}

#5



                this.Hide();//隐藏登录画面
                fromObj.ShowDialog();//显示子form
                //显示登录画面
                this.Show();

#6


登陆画面这么些就可以。登陆显示登录后的主画面,主画面关闭后再重新显示登陆画面。

#7


用Application.Run(new 新登陆窗口());,,新开个线程用来显示新窗口,然后你就可以this.Dispose();掉自身了

#8


和楼主有同样的困扰!
感觉楼上的几位说的方法好像不好用。

我想实现 从  主界面->分界面(主界面不显示)->主界面

好想很简单,但就是实现不了,等大侠来帮助!!!

支持楼主!!!

#9


应该不可以吧..不过隐藏主界面不就能达到一样的效果吗?

#10


引用 8 楼 love_aiqiu_123 的回复:
和楼主有同样的困扰! 
感觉楼上的几位说的方法好像不好用。 

我想实现 从  主界面->分界面(主界面不显示)->主界面 

好想很简单,但就是实现不了,等大侠来帮助!!! 

支持楼主!!!

怎么就不行呢?
//验证密码通过后
frmMain _frmMain = new frmMain();
 _frmMain.Show();
//弹出manageForm后,隐藏form1
this.Hide();

#11


抱歉我太想当然了,不能通过
Application.Run(new Form2());
this.Dispose();
的方法来达到LZ说的效果。会提示无法从单一线程中开启消息循环……

LZ可以新建一个线程用来显示Form2,Form1的消息循环线程就可以结束了

private void Button1_MouseClick(object sender, MouseEventArgs e)
{
    Thread t = new Thread(new ThreadStart(delegate { Application.Run(new Form2()); }));
    t.Start();
    this.Dispose(true);
}

#12


 


Form2 form=new Form2();
form.showDialog();

#13


引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭? 
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗?


如果两个窗体是父子窗体的关系,那么父窗体关闭,子窗体也会关闭的。就想楼房,若果一楼倒塌了,那二楼肯定也就没了。
你说的可以不要把两个窗体设为父子窗体的关系,彼此间独立。就很容易实现了。

#14


隐藏

#15


也可以在Main窗体Load中,调用Login。

#16


引用 14 楼 amao521 的回复:
隐藏

up

#17


依照楼主的意思,这样貌似不行吧?把父窗口关闭之后 ,子窗体也就关闭了。你可以 ,hide或者是 this.Visible=false;

#18


up

#19


子窗体关闭父窗体必然是不行的。一个窗体的析构过程在是这样的,先检查是不是new出了子窗体,如果是,则先调用子窗体的析构,即关闭子窗体,然后在调用自己的析构函数,将自己关闭。
这样理解来看,如果子窗体想要关闭父窗体,那么就得先关闭自己才行,本身来看就矛盾了。
我有一个例子:使用了三个窗体,
A:第一个启动的窗体,显示程序版本信息。在Form_load事件中显示Login画面(B窗体)
B:Login窗体
C:程序主窗体。Login成功后进入。主窗体显示的时候,A和B都要隐藏。
怎么做呢?
有两种办法,第一个使用委托。这个稍微难一点,但是也可以实现,我已经试验成功(当然不是试图去关闭父窗体,只是让它隐藏不显示)
方法2:在B窗体中保存A窗体的实例,(即:在B Show之前的构造B时,将A本身传给B),同样C中包含B的实例
       在B窗体的登陆按钮压下,并且成功登陆后使用下面的代码:
        this.WindowState = FormWindowState.Minimized;

        this.sbi.WindowState = FormWindowState.Minimized;//sbi 是A窗体的实例
 
      当然这样还没有隐藏掉,你还需要在A和B窗体的Resize事件中写代码
       if (this.WindowState == FormWindowState.Minimized)
             {
                 this.Visible = false;
                 // this.SendToBack();
             }
     }
到此实现了隐藏的功能,下面讲解怎么实现关闭的功能。
      在C的Closing事件中,关闭B(C中包含B的实例),在B的Closing事件中关闭A(B中包含A的实例)

#20


隐藏 - -!

#21


回帖是一种高尚的情操

#22


先把那个主窗体隐藏了,代码是this.hide();
显示那个窗体,在把那个窗体实例话了,代码是 例如:form1 cn=form();
在把你想显示的那个窗体显示就行了,代码是 cn.show();
就这样ok了

#23


学习19楼

#24


无法关闭父级窗体,要么hide要么通过main函数来启动,要么你就在进了主窗体然后弹出登录窗体。

#25


在主程序窗体的模块(FM)外部模块(FW)中要调用 FM中的东西,设定一个全局的量,通常为静态,把FM的引用传递给静态量,引用它就可.

#26


Main方法不要写在主窗口中,其实可以把两个窗口程序看成独立的对象就可以了,

如 progame.cs中写main方法
Main()
{
   LoginFrom lf = new LoginFrom();
   //这里对lf进行判断
   if (OK)
   {
     Mainform mf= new Mainform();
     mf.show;
   }
}

vs2005 自动创建的工程,都已经把Main方法拿到一个独立的cs文件里面了,Program.cs

#27


我刚刚解决的问题哈
你参考一下! 比较简单 实用吧

主窗体为程序入口,登录窗体中,登陆成功后先不要把它dispose(),暂时隐藏.由主窗体来解决它!

     
 
            //通过登录窗体进行登录
            Login login = new Login();
            login.ShowDialog();
           
            if (login.IsDisposed)
            {
                this.Dispose();
            }

      //登录后注销掉登录窗体
            //label1.Text = login.Controls["textBox1"].Text.ToString();
          login.Dispose();


#28


隐藏,或者不要建立父子关系。

#29


引用 11 楼 tsorgy 的回复:
LZ可以新建一个线程用来显示Form2,Form1的消息循环线程就可以结束了 

C# code
private void Button1_MouseClick(object sender, MouseEventArgs e)
{
    Thread t = new Thread(new ThreadStart(delegate { Application.Run(new Form2()); }));
    t.Start();


哇,能想到用线程,太牛了,我也得试试~~

#30


5楼的做法不错
不过昨天看MSDN的帖子
说窗体显示为对话框时,点击关闭按钮,不会调用对话框窗体的Close()方法
并且要在处理完对话框的DialogResult后,调用对话框的Dispose()方法来释放对话框窗体
占用的资源

Form login = new Form();
login.ShowDialog();
if ( login.DialogResult == DialogResult.OK)
{
      login.Dispose();
      Application.Run(new mainForm());
}
else
{
      login.Dispose();
}

我在窗体的事件处理程序里是直接这样些的
private void okButton_Click(object sender, EventArgs e)
{
     //省略若干验证代码
     this.DialogResult = DialogResult.OK;
}

private void cancelButton_Click(object sender,EventArgs e)
{
     this.DialogResult = DialogResult.Cancel;
}

在事件处理程序中没有调用Close()方法    尽管调用了好像也没什么区别
但是参照文档   还是这样写了


     

#31


还得在 login窗体的 closing事件中 加一行代码 this.dispose();
因为点LOGIN右上角的x时也要能退出,而不加载主窗体!!

#32


引用 27 楼 seewp 的回复:
我刚刚解决的问题哈 
你参考一下! 比较简单 实用吧 

主窗体为程序入口,登录窗体中,登陆成功后先不要把它dispose(),暂时隐藏.由主窗体来解决它! 

     
C# code 
            //通过登录窗体进行登录
            Login login = new Login();
            login.ShowDialog();
           
            if (login.IsDisposed)
            {
                this.Dispose();
            }

      …



还得在 login窗体的 closing事件中 加一行代码 this.dispose(); 
因为点LOGIN右上角的x时也要能退出,而不加载主窗体!!

#33


引用 4 楼 abcyzq 的回复:
引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭? 
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗? 
 

可以如下做。 
static void Main() 
        { 
          FrmLogin frmLogin = new FrmLogin(); 
            frmLogin.ShowDialog(); 
            if (frmLogin.DialogResult == DialogResult.OK) 
   …

4楼的方法可以

#34


Application的run有几种重载.
其中一种是Application.Run(Form)
这代表一旦Form被关闭就自动退出消息循环.
VS IDE默认生成的代码就是调用的这个重载.

而LZ需要的是关闭程序启动时显示的Form1(Application.Run里的那个)
显示Form2且不中断消息循环.可以这样修改Main函数:
Form1 frm = new Form1();
frm.Show();

Application.Run();

这样你在关闭Form1后就不会退出消息循环了.但是缺点就是你的Form2关闭
后消息循环也不会退出.程序的退出需要你自己调用Application.Exit();

#35


        /// <summary>
        /// 用户登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void loginBtn_Click(object sender, EventArgs e)
        {
            if (UseNameTxt.Text.Trim().Length == 0)
            {
                UseNameTxt.Focus();
                lblUse.Visible = true;
            }
            //string role = myUserCheck(UseNameTxt.Text, PwdTxt.Text);
            string role = "test";
            if (role.Length != 0)
            {
                Thread th = new Thread(new ThreadStart(delegate { Application.Run(new FrmMain(role)); }));
                th.Start();
                this.Dispose();
                this.Close();
            }
        }

        /// <summary>
        /// 关闭登录画面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CloseBtn_Click(object sender, EventArgs e)
        {
            this.Dispose();
            this.Close();
        }

#36


上面的方法和下面的方法全部都可以实现登录画面的效果!并且已经实际运行过了。
==========================================================================
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            FrmLogin frmLogin = new FrmLogin();
            frmLogin.ShowDialog();
            
            if (frmLogin.DialogResult == DialogResult.OK)
            {
                Application.Run(new FrmMain(frmLogin.Role));
            }
            else
            {
                frmLogin.Dispose();
                frmLogin.Close();
            }
        }
=====================================================================
        /// <summary>
        /// 用户登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void loginBtn_Click(object sender, EventArgs e)
        {
            if (UseNameTxt.Text.Trim().Length == 0)
            {
                UseNameTxt.Focus();
                lblUse.Visible = true;
            }
            //role = myUserCheck(UseNameTxt.Text, PwdTxt.Text);
            role = "test";
            if (role.Length != 0)
            {
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            return;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CloseBtn_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
        }

#37


只能隐藏...

#38


公司招聘高级C#工程师
3年以上C#.NET技术路线经验(开发、分析、设计)、1年以上的软件系统设计经验,熟悉UML建模,

珠海政采软件技术有限公司北京分公司
地址:北京市海淀区中关村软件园
网址:http://www.gpcsoft.com
邮箱:wangyq@gpcsoft.com;evalywang99@yahoo.com.cn

#39


A窗体调用B窗体,A窗体就变成了B窗体的父窗体,B依赖于A窗体而存在,A死了,B没有了依赖体就会死亡。
可以在生成B的时候隐藏A,
有时候在项目中,窗体时相对的,A是父窗体,有时候可以看做子窗体,让B这个子窗体看做父窗体来调用A

#40


经本人验证,11楼的写法可以,而且本人认为较好!

#41


顶下11楼的,方法不错,我是用你的方法实现的

#42


顶11楼,不错,这是一个很好的思路

#43


顶个 貌似11楼方法不错

#44


form1 f1=new form1();
f1.show();
this.Hide();

#45


顶11楼,貌似挺好

#46


11楼不错

#47


http://zhidao.baidu.com/question/135595846.html

#48


十一楼的那个方法不能从子窗体重新生成主窗体。
我是想弄一个字窗体添加数据,然后重新调回主窗体刷新页面。可是主窗体关了之后貌似无法再开启。

#49


引用 4 楼 abcyzq 的回复:
引用楼主 sandwave 的帖子:
C#窗体如何实现在调用子窗体后关闭自身窗体,而被调子窗体不关闭?
类似登录窗体,除了在登录窗体后出现的主界面窗体的载入方法中运行登录窗体实例,就没有其它办法能实现了吗?


可以如下做。
 static void Main()
  {
  FrmLogin frmLogin = new FrmLogin();
  frmLogin.ShowD……


这个挺好的,难道你还有其它的需求 ?

#50


学习了