c# – 刷新表单及其所有子项

c# – 刷新表单及其所有子项,第1张

概述我正在研究别人写的旧代码.在此, Windows.Forms.Form的子类是在另一个主Windows.Forms.Form中创建的 class MainForm : Windows.Forms.Form { m_subForm = null; /* Much more stuff */ private void createSubForm { 我正在研究别人写的旧代码.在此,Windows.Forms.Form的子类是在另一个主windows.Forms.Form中创建的

class MainForm : windows.Forms.Form {    m_subForm = null;    /* Much more stuff */    private voID createSubForm     {         m_subForm= new SubForm();         m_subForm.Text = "";         m_subForm.MdiParent = this;         m_subForm.windowstate = Formwindowstate.Maximized;         m_subForm.ControlBox = false;         m_subForm.Show();         // There is no comment in the code on why this is done:         this.Height -= 1;         this.Height += 1;    }}

这最后两行困扰着我.它们实际上是必要的,因为如果省略它们,主要形式内的形状会在边缘周围切断.只有在手动缩放屏幕后,子窗体才会再次适合主窗体.如果试图将= – = Hack替换为:

this.Refresh();

但这并不能解决问题.显然,这只是刷新主要形式而不是子形式.如果没有这个丑陋的黑客,我怎么能纠正这个?

解决方法
m_subForm.ControlBox = false;

这对于MDI子窗体来说是非法的,它必须使所有窗口装饰正常工作.并且实际上可以用作MDI子项,它是一种基于允许用户最小化/恢复/最大化子窗口的窗口模型.从20世纪90年代早期开始,监视器仍然具有非常低的分辨率,因此显示窗口的屏幕空间不大.

但Winforms不会强制执行此MDI要求.修补高度是一个黑客,让窗户正确绘画.应该从产生的闪烁中注意到.

当您始终显示最大化的子窗口时,MDI毫无意义.通过简单地将UserControl交换进出表单,您可以得到完全相同的效果,减去必须与MDI控制栏作战.如果将其TopLevel property设置为false,则此类UserControl也可以是Form.

总结

以上是内存溢出为你收集整理的c# – 刷新表单及其所有子项全部内容,希望文章能够帮你解决c# – 刷新表单及其所有子项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230228.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存