C#windows Form两个窗体间的Hide()和Show()问题

lonyjianhui 2010-06-12 03:31:31
需要解决一下两个问题之一:
1,两个窗体相互切换,先调用Hide()方法,再调用Show()方法,会出现切换时停顿的问题,如何解决?注:只能先Hide()后Show(),不能调过来;
2,两个窗体共用一个串口,窗体间切换时如果先Show()后Hide()的话,会出现串口冲突的问题,如何在Show后一个窗体前关闭前一个窗口的串口?注:关闭和打开串口放在VisibleChanged()事件里面。

大家要是能解决第一个问题就最好,也最直接明了,谢谢!
...全文
1557 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂虎追影 2010-06-15
  • 打赏
  • 举报
回复
将窗体变量定义成静态,修改窗体可见性,不要隐藏窗体试试!
zzz9413 2010-06-15
  • 打赏
  • 举报
回复
闪烁是因为人眼捕捉到渲染的尾部,用双倍缓冲解决,原来是先存到一个看不见的控件里,等绘制完毕再显示出来。
双倍缓冲:设置窗体的行为属性DoubleBufferd=true
leavemaple 2010-06-15
  • 打赏
  • 举报
回复
ChildForm childForm = new ChildForm();
一:
childForm.Show();
childForm.Hide();
二:
childForm.Hide();
childForm.Show();

都会出现窗体闪烁,是因为窗体Show了之后,要进行窗体重绘,肯定会有闪烁,取决你的机器的性能,不然你拿个最低可以运行VS的配置试试,你即使只有childForm.Show();也可以出现闪烁,这是VS的问题,窗体重绘必然会有闪烁。
风在指间 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mervyn807 的回复:]
form2 f2=new form2();
f2.show();this.hide();
form2的Click事件:form1 f1=new form1();
this.hide();f1.show();

楼主应该固定form1和form2,你这样new下去
系统资源马上就被你用光了
不出问题才怪呢
[/Quote]
的确.
缭绕飘渺 2010-06-13
  • 打赏
  • 举报
回复
form2 f2=new form2();
f2.show();this.hide();
form2的Click事件:form1 f1=new form1();
this.hide();f1.show();

楼主应该固定form1和form2,你这样new下去
系统资源马上就被你用光了
不出问题才怪呢
兔子-顾问 2010-06-13
  • 打赏
  • 举报
回复
方向错了,楼主。form1中。new form2,然后hide掉自己,form2中又创建form1,只能不停的创建新窗体,每次都不是之前隐藏的那个。每次new都会调用load等方法。如果界面控件多。自然会闪烁看到停顿。

你可以在program类中定义2个静态变量:
然后调用静态变量的show,hide
fus53 2010-06-13
  • 打赏
  • 举报
回复
将Show()换成ShowDialog(),然后close一下要关闭的窗体。

this.Hide();
f1.ShowDialog();
this.Close();
xcf007 2010-06-13
  • 打赏
  • 举报
回复
我的方法类似楼上的:
Form1.cs里
字段 Form frm2;
form1_load里
实例化frm2=new Form2();

form1_click里
form2.show();this.hide();

----------------------------------
Form2.cs里:
字段 Form _parent;
构造方法里把form1引用传进来:
public Form2(Form myparent)
{
_parent = myparent;
}

form2_click()
{
_parent.Show();
this.Hide();
}
zzx509 2010-06-13
  • 打赏
  • 举报
回复
不清楚你在什么环境下使用会出现你说的情况。
我的测试没有出现停顿。但窗体之间切换不应每次都new,而之前的隐藏。
那样资源消耗越来越大。


Form2 f2;
private void button1_Click(object sender, EventArgs e)
{
if (f2 == null || f2.IsDisposed)
{
f2 = new Form2();
f2.Frm1 = this;
}
f2.Show();
this.Hide();
}

//Form2中
Form1 f1 ;
public Form1 Frm1
{
set { f1 = value; }
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
f1.Show();
}
sardineany 2010-06-13
  • 打赏
  • 举报
回复
切换停顿?解释一下呗。。
lonyjianhui 2010-06-13
  • 打赏
  • 举报
回复
第二个方案我自己经过半天的努力终于解决了,但我很想解决第一个,希望大家努力!
补充:不是load的问题,大家可以建两个空白的窗体Form1,Form2;
Form1的Click事件:form2 f2=new form2();
f2.show();this.hide();
form2的Click事件:form1 f1=new form1();
this.hide();f1.show();
结果还是会出现第一个问题。最后,我不是想知道为什么出现这个问题,我是想知道如何解决这个问题。希望兄弟姐妹们帮帮忙,谢谢!
lonyjianhui 2010-06-13
  • 打赏
  • 举报
回复
我再次跟大家说明下,我要解决的问题不是New的问题,这个问题我也懂,我不懂的是,如何解决两个form切换:先hide后show和先show后hide两种方法出现的问题:先hide后show的话肯定可以用肉眼看得见是一个窗体隐藏后再显示另一个窗体的。但我不知道怎么做才能消除这个问题。
wuyq11 2010-06-12
  • 打赏
  • 举报
回复
怎么写的hide,show
捷哥1999 2010-06-12
  • 打赏
  • 举报
回复
修改为visible=false看看?
mngzilin 2010-06-12
  • 打赏
  • 举报
回复
1.停顿是什么意思
mngzilin 2010-06-12
  • 打赏
  • 举报
回复
2.在Program.cs中定public串口,然后再个窗体中调用
zl194 2010-06-12
  • 打赏
  • 举报
回复
停顿应当是窗口load时,任务太多。想想别的方法,把load时的任务减少,如用个time当load后再执行窗口内容。或多线程解决。最好是多线程。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧