private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false; //只触发一次!
Form2 f2 = new Form2();
f2.Show();
f2.Activate();
this.Visible=false;
this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized;
this.Hide();
}
问题出现了。10秒后,form2正常显示出来了,但是form1仍然没有消失。(偶尔会消失~~~~)
为什么我用了这么多隐藏当前窗体的方法和属性,仍然不能隐藏form1窗体呢?有时候会消失form1窗体。
提示:1。我的form2窗体有很多控件和插件,要加载很多东西。但是form2和form1没有任何控件上的关系。
2。form1窗体加了自定义的paint事件,实现在窗体上显示一个GIF图片。
3。如果把form2换成只有一个Button控件的窗体时,基本每次都会按照我设计的思路隐藏form1窗体。
请问用什么方法可以实现题目的想法呢?
10 个解决方案
#1
肯定是form1有代码又把自己给鼓捣出来了,找到这个代码(例如所谓自定义Paint),让它首先判断该不该执行原来的鼓捣自己的代码,别总是鼓捣自己。
#2
不过,不知道你为什么这样设计。如果是好的应用,不要这样玄的方式对待用户行为!应该把管理两个窗体的职责交给上级的程序(因为你也说两个窗体没有什么关系)。窗体1只应该抛出一个事件,然后什么都不做。应该是那个创建窗体1的程序监听到事件之后,创建窗体2,然后关闭窗体1。关闭,而尽可能不要隐藏。
#3
那个form1是Program.cs里加载的第一个窗体。这样是不是就不能关闭form1呢?关闭了form1后就全关了貌似。
O(∩_∩)O谢谢啦。我把form1的自定义paint去掉了,还是不行。是不是还有其他解决方法?
后来没办法了,我就把form2的窗体构造函数加了form1这个参数,然后在form2的load方法里让form1的visible=FALSE;这样就行了。但是可以明显的看出来一个效果:form2都显示完毕以后form1才消失。怎么解决这个问题呢?
求救~~~~~~~~~~~~~~~
O(∩_∩)O谢谢啦。我把form1的自定义paint去掉了,还是不行。是不是还有其他解决方法?
后来没办法了,我就把form2的窗体构造函数加了form1这个参数,然后在form2的load方法里让form1的visible=FALSE;这样就行了。但是可以明显的看出来一个效果:form2都显示完毕以后form1才消失。怎么解决这个问题呢?
求救~~~~~~~~~~~~~~~
#4
timer1.Enabled = false; //只触发一次!
Form2 f2 = new Form2();
f2.Show();
this.Visible=false;
我觉得这样就可以的没必要加那么多代码
#5
new System.Threading.Thread((System.Threading.ThreadStart)delegate
{
Application.Run(new Form());
}).Start();
this.Close
语法糖(1) -- 打开新窗体,关闭当前窗体的最简化方法
http://blog.csdn.net/wuyazhe/archive/2010/06/02/5642431.aspx
#6
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false; //只触发一次!
this.ShowInTaskbar = false;
this.Hide();
Form2 f2 = new Form2();
f2.Show();
}//from1的隐藏放到show Form2前面试试
#7
#8
楼主是不是使用form1作为一个启动界面呢?如果是这样,那可以把form2作为主窗体。form1为子窗体咯
#9
果然聪明!
不过你这么做造成的结果是form1很快关闭了,但是几秒钟后form2才出现,因为form2需要加载很多插件后才能启动。
不过你这么做造成的结果是form1很快关闭了,但是几秒钟后form2才出现,因为form2需要加载很多插件后才能启动。
#10
不好意思,发错了。不是发给你的,应该引用6楼的,呵呵
#1
肯定是form1有代码又把自己给鼓捣出来了,找到这个代码(例如所谓自定义Paint),让它首先判断该不该执行原来的鼓捣自己的代码,别总是鼓捣自己。
#2
不过,不知道你为什么这样设计。如果是好的应用,不要这样玄的方式对待用户行为!应该把管理两个窗体的职责交给上级的程序(因为你也说两个窗体没有什么关系)。窗体1只应该抛出一个事件,然后什么都不做。应该是那个创建窗体1的程序监听到事件之后,创建窗体2,然后关闭窗体1。关闭,而尽可能不要隐藏。
#3
那个form1是Program.cs里加载的第一个窗体。这样是不是就不能关闭form1呢?关闭了form1后就全关了貌似。
O(∩_∩)O谢谢啦。我把form1的自定义paint去掉了,还是不行。是不是还有其他解决方法?
后来没办法了,我就把form2的窗体构造函数加了form1这个参数,然后在form2的load方法里让form1的visible=FALSE;这样就行了。但是可以明显的看出来一个效果:form2都显示完毕以后form1才消失。怎么解决这个问题呢?
求救~~~~~~~~~~~~~~~
O(∩_∩)O谢谢啦。我把form1的自定义paint去掉了,还是不行。是不是还有其他解决方法?
后来没办法了,我就把form2的窗体构造函数加了form1这个参数,然后在form2的load方法里让form1的visible=FALSE;这样就行了。但是可以明显的看出来一个效果:form2都显示完毕以后form1才消失。怎么解决这个问题呢?
求救~~~~~~~~~~~~~~~
#4
timer1.Enabled = false; //只触发一次!
Form2 f2 = new Form2();
f2.Show();
this.Visible=false;
我觉得这样就可以的没必要加那么多代码
#5
new System.Threading.Thread((System.Threading.ThreadStart)delegate
{
Application.Run(new Form());
}).Start();
this.Close
语法糖(1) -- 打开新窗体,关闭当前窗体的最简化方法
http://blog.csdn.net/wuyazhe/archive/2010/06/02/5642431.aspx
#6
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false; //只触发一次!
this.ShowInTaskbar = false;
this.Hide();
Form2 f2 = new Form2();
f2.Show();
}//from1的隐藏放到show Form2前面试试
#7
#8
楼主是不是使用form1作为一个启动界面呢?如果是这样,那可以把form2作为主窗体。form1为子窗体咯
#9
果然聪明!
不过你这么做造成的结果是form1很快关闭了,但是几秒钟后form2才出现,因为form2需要加载很多插件后才能启动。
不过你这么做造成的结果是form1很快关闭了,但是几秒钟后form2才出现,因为form2需要加载很多插件后才能启动。
#10
不好意思,发错了。不是发给你的,应该引用6楼的,呵呵