项目是这样设计的,一个BaseForm的基类保存全局静态对象(不知道这个有没有影响)。
子窗体使用MDI的方式显示,会使用到Panel容器和DataGridView做列表。
问题是子窗体显示的时候会闪烁,有明显的绘制过程,而且拖动会闪烁。找了网上的一些解决方案,不闪了,只是会很卡,在拖动子窗体时会有0.5秒左右的停滞感。
子窗体除了基本的响应事件还有一个SizeChanged调节窗体元素位置的事件
解决闪烁的代码是
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED return cp; } }
之前一直做web,WinForm不大会,这个如何解决呢?
别用sizechange事件改变布局,使用duck和锚定来实现动态布局
确实可以看出来是WINFORM不大会了。
做WEB的人做WINFORM一个麻烦就是老觉得界面不好看,然后就作死想自己渲染,然后结果你也知道了。
如果只是布局的话,其实WINFORM已经做得很好了(比IOS的鸟布局好一万倍)
有Anchor, Dock, 有Panel, Tablelayout,基本都能自动调整布局的。
真想漂亮一点,找个第三方组件,比如Devexpress, Telerik, ComponentOne,不要听人说啥慢,反正比你写得好多了。
我可以解决, 但是需要付费
如果做商品化软件,先把功能实现后,尽可能考虑把界面做的靓丽些,即使付费买第三方软件也是值得的,如果是定制开发的软件,还是把主要精力放在功能的完善上。