我化简下例子(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的子窗体,然后来一句”皮之不存毛将焉附“的解释?请问的思路错在什么地方,求指点?
这个你记住就是这样的就行了。哈哈。
因为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,这个软件就关了。
大叔,你的代码,怎么那么高明,看不懂……public Sub Main()我懂这个 static void Main()
@黑夜猫头鹰:
我写的是VB.NET,跟C#差不多,每句后面加上分号;就是C#了,哈哈。
重点是书本的那段代码:this.Visible = false不是让Login窗体透明吗?但是我们都不用Login窗体了,用this.Visible = false浪费内存吗?而且,Net没说用this.close()是关闭程序,程序的运行结果是卡死了?求大叔普及!!!
@黑夜猫头鹰:
因为你用的是application.run(Login)这样的写法,如果你把Login关闭了,整个程序就退出了。
你在项目中设置的启动窗口实现的就是这样的效果。
你可以试一下我的第二种方法。项目中设置启动Main这个方法。
@爱编程的大叔: 实验效果不是关闭程序,是程序卡死了,卡死,卡死……无法调试
@黑夜猫头鹰:
所以你现在明白你们老师为啥让你们this.visible 了吧,这样简单。
要想有追求,第一次总是很痛的。光有情怀顶个锤子。
@黑夜猫头鹰:
算了,帮你Google了一段C#代码,如下
static void Main() { LoginForm fLogin = new LoginForm(); if (fLogin.ShowDialog() == DialogResult.OK) { Application.Run(new MainForm()); } else { Application.Exit(); } }
@爱编程的大叔: 哥哥,这个不是一个纯粹的科学问题吗?怎么变成了人生哲学问题!-!
@黑夜猫头鹰:
其实你夸你呢,很多人完全不动脑子。
顺便提一下,其实Login Form占不了多少内存,
不过关键是你理解了皮之不存毛将焉附的道理。
@爱编程的大叔: 大叔,我很笨,我就是个问题少年,老师一直说”我爱钻牛角尖“,记得当年问我物理老师,他都不会说话了
this,代表当前窗体,close是关闭当前窗体,也就释放了,你的代码中实在当前窗体中创建的Mainform,当前窗体都不存在了,资源已经释放了。visible是可见性,为false,代表隐藏,但是窗体还是存在的,只是隐藏了。可以查看进程,在进程中还是有这个exe的。
谢谢