首页 新闻 赞助 找找看

用this.Close()代替this.Visible = false?不可以,请问为什么.......

0
悬赏园豆:5 [已解决问题] 解决于 2014-07-28 22:27

我化简下例子(Login是个登陆窗体 ):

public partial class Login : Form
{
public Login()
{
InitializeComponent();
}

private void btnYes_Click(object sender, EventArgs e)
{
MessageBox.Show("欢迎进入管理系统", "登陆成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
MainFrm mainForm = new MainFrm();
mainForm.Show();
//this.Visible = false;这是课本代码,我突发奇想用了下【this.Close();】不能运行……
this.Close();

}
为什么用this.Close()函数,无法弹出mainForm 窗体,用this.Visible = false就可以呢??this.Close()函数,不是只关闭Login 窗体吗?难道在Login窗体生成mainForm 窗体,那么mainForm 窗体就是Login的子窗体,然后来一句”皮之不存毛将焉附“的解释?请问的思路错在什么地方,求指点?

黑夜猫头鹰的主页 黑夜猫头鹰 | 初学一级 | 园豆:3
提问于:2014-07-25 21:30
< >
分享
最佳答案
0

这个你记住就是这样的就行了。哈哈。

因为NET认为你的进程已经结束了。有几种方法可以避免此问题,你看看理解理解。

1、mainForm.showdialog 这是一个方法。

2、你不要直接启动Login Form, 可以这样

Public Class Progame

  public Sub Main()

    dim frmTemp as new Login

 

    with frmTemp

      if .Showdialog=Ok then

        application.run(mainform)

      end if

    end with

  end sub

end class

 

大致的意思是application.run的那个FORM一旦关闭了close,这个软件就关了。

收获园豆:3
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-07-25 22:26

大叔,你的代码,怎么那么高明,看不懂……public Sub Main()我懂这个 static void Main()

黑夜猫头鹰 | 园豆:3 (初学一级) | 2014-07-25 22:28

@黑夜猫头鹰: 

我写的是VB.NET,跟C#差不多,每句后面加上分号;就是C#了,哈哈。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-25 22:30

重点是书本的那段代码:this.Visible = false不是让Login窗体透明吗?但是我们都不用Login窗体了,用this.Visible = false浪费内存吗?而且,Net没说用this.close()是关闭程序,程序的运行结果是卡死了?求大叔普及!!!

黑夜猫头鹰 | 园豆:3 (初学一级) | 2014-07-25 22:32

@黑夜猫头鹰: 

因为你用的是application.run(Login)这样的写法,如果你把Login关闭了,整个程序就退出了。

你在项目中设置的启动窗口实现的就是这样的效果。

你可以试一下我的第二种方法。项目中设置启动Main这个方法。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-25 22:34

@爱编程的大叔: 实验效果不是关闭程序,是程序卡死了,卡死,卡死……无法调试

黑夜猫头鹰 | 园豆:3 (初学一级) | 2014-07-25 22:38

@黑夜猫头鹰: 

所以你现在明白你们老师为啥让你们this.visible 了吧,这样简单。

要想有追求,第一次总是很痛的。光有情怀顶个锤子。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-25 22:40

@黑夜猫头鹰: 

算了,帮你Google了一段C#代码,如下

static void Main() { LoginForm fLogin = new LoginForm(); if (fLogin.ShowDialog() == DialogResult.OK) { Application.Run(new MainForm()); } else { Application.Exit(); } }

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-25 22:46

@爱编程的大叔: 哥哥,这个不是一个纯粹的科学问题吗?怎么变成了人生哲学问题!-!

黑夜猫头鹰 | 园豆:3 (初学一级) | 2014-07-25 22:46

@黑夜猫头鹰: 

其实你夸你呢,很多人完全不动脑子。

顺便提一下,其实Login Form占不了多少内存,

不过关键是你理解了皮之不存毛将焉附的道理。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-25 22:52

@爱编程的大叔: 大叔,我很笨,我就是个问题少年,老师一直说”我爱钻牛角尖“,记得当年问我物理老师,他都不会说话了

黑夜猫头鹰 | 园豆:3 (初学一级) | 2014-07-25 23:04
其他回答(1)
0

this,代表当前窗体,close是关闭当前窗体,也就释放了,你的代码中实在当前窗体中创建的Mainform,当前窗体都不存在了,资源已经释放了。visible是可见性,为false,代表隐藏,但是窗体还是存在的,只是隐藏了。可以查看进程,在进程中还是有这个exe的。

收获园豆:2
wolfy | 园豆:2636 (老鸟四级) | 2014-07-26 15:15

谢谢

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2014-07-28 22:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册