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

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

大家要是能解决第一个问题就最好,也最直接明了,谢谢!
...全文
1630 17 打赏 收藏 转发到动态 举报
写回复
用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后再执行窗口内容。或多线程解决。最好是多线程。
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

111,129

社区成员

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

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

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