WinForm心得
- 如果有UI部分可以复用,那么可以单独设置为一个UserControl或者一个自定义子类控件
- 如果是单一一个控件,只是继承并修改了默认控件的样式行为,那么可以直接创建一个class并继承该控件,缺点是Designer中不可见
- 如果是一组控件或者说一个区域,可以创建一个UserControl,并且在Designer中自行做界面设计
- 即使做成了一个UserControl或自定义子类控件,在外层Form等父控件中使用时,Size还是要重新设置,就像使用Winform自带的控件一样。因此在这个UserControl或自定义子类控件中,根据Size做的设置,都要注意一下自适应度了。
- WinForm中没有z-index的概念,同一级的控件直接根据位置大小进行覆盖
- 小心动态调整布局或大小时,发生控件之间的遮罩情况
- 利用Panel、Dock和Anchor属性进行自适应布局
- 举个简单的例子来说,如果一个Form由上中下三个Panel组成,那么上下两个Panel可以设置为特定高度、Dock为Top和Bottom,然后中间的Panel要设置为Dock为Fill,那么中间的Panel就可以自适应高度了,但是在Designer中需要右击选择BringToFront,否则可能中间这个Panel的高度会包含上面或下面的Panel的高度。
- Dock和Anchor属性可以通过位运算符&等进行组合。
- 做UI时,尽量保证Designer模式是可见、可用的
- 好处是方便进行总体布局、后期修改,不然有个东西显示不出来,都看不出来是为什么,比如被谁挡住了。。。否则只能通过设置背景色后再运行观察了
- 保证Designer.cs中的代码符合vs的规则和顺序,免得自己直接改Designer.cs文件导致莫名其妙的问题,比如.BeginInit()、SuspendLayout()、((System.ComponentModel.ISupportInitialize)(this.dgvDataSourceSearchHistory)).EndInit();、this.ResumeLayout(false);this.PerformLayout();等的顺序
- 避免在Designer.cs中使用单例模式、自定义构造函数、泛型。前两个可以延迟到.cs文件中在构造函数调用InitializeComponent()后再做;泛型可以考虑用自定义类、object代替。
- 在Designer模式中修改,也比较容易看到默认的margin等东西、设置颜色代码等,也容易在不同控件间切换、选择(Esc键可以选中上一级控件)。
- 即使使用了多语言或者动态填充数据,也要保证空白控件在Designer模式可见,至少方便弄size、location、布局。
- 控件之间的通信(一个父控件包含两个子控件为例)
- 父控件通知子控件:直接调用子控件函数
- 子控件通知父控件:子控件定义和在自身事件中调用该事件,父控件订阅和实现该事件,在父控件中进行事件绑定/订阅。
- 子控件之间:主动调用的控件定义和自身事件中调用该事件,另一个控件订阅和实现该事件,在父控件中进行事件绑定/订阅。
- 类似的,如果要使用子控件的子控件,直接将其设为public。
- 如果有一些设置是通用的(比如某个颜色),那么如果想兼顾Designer可视化和代码可维护性,可以既在Designer中设置该值,也在代码中的构造函数中使用全局变量再设置一次该值?
- 一个Form中的各级子控件的默认背景色(只是panel?),均继承自上级panel(form的背景色无效?)
WinForm心得的更多相关文章
- WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信
原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...
- RFID的winform程序心得2
RFID的winform程序心得1 webBrowser1.AllowWebBrowserDrop = false;//将 WebBrowser 控件的 AllowWebBrowserDrop 属性设 ...
- RFID的winform程序心得1
/// 根据日期获取当周星期一 /// </summary> /// <param name="dt"></param> /// <ret ...
- winform 开发心得~
winform自适应不同分辨率 不同dpi 1.窗体AutoScaleMode属性 使用None 2.自定义控件 AutoScaleMode 使用Inherit 3.所有控件窗体字体使用px为单位
- C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用心得
在网上查了很多,发现没有讲述关于--C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用--的资料 自己研究了一个使用方法.下面来看看. 我有两个窗体:LOGINFRM,M ...
- C# WinForm 第一个项目控件使用心得
1.控件心得 1.1 基础控件 panel 作用:布局 难点:重绘边框改变颜色 重绘panel里如果有fill填充控件 panle的padding要改个值 private void pnlPaintB ...
- C# winform 编程 向ACCESS数据库导入EXCEL表使用心得
public string MyConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ErLake.mdb&quo ...
- Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解
最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相 ...
- WCF学习心得----(四)服务承载
WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...
随机推荐
- 如何理解dart的mixin
mixin翻译出来就是混入的意思 混入,就是一个类可以使用另一个类里的功能比如方法或者属性,其实这个功能并不陌生 ,有点类似c#里的扩展方法,但是并不同于, mixin和implements有着本质的 ...
- 如何创建dll以及使用
使用dll的好处: 隐藏了代码,公开了功能. 在VS2017中,创建一个DLL工程项目,将你的代码写入.cpp文件中,然后比如 这样: //////////// test.cpp #include ...
- 关于struts2.x中(警告: Could not find property [struts.valueStack])的解决方法
出现“警告: Could not find property [struts.valueStack]”这样的问题,是由于少引用了log4j.jar包,不过,不引用也不影响使用.看个人的爱好了.
- 关于PHP如何用实现防止用户在浏览器上使用后退功能重复提交输入
$(function(){ if(window.history && window.history.pushState){ $(window).on('popstate',functi ...
- LeetCode之位操作题java
191. Number of 1 Bits Total Accepted: 87985 Total Submissions: 234407 Difficulty: Easy Write a funct ...
- linux下connect超时时间探究
最近在linux做服务器开发的时候,发现了一个现象:服务器在启动的时候调用了 connect 函数,因为连接了一个不可用的端口,导致connect最后报出了 “Connection timed out ...
- Oracle-11g 回缩表高水位
回缩表高水位的意义: 所有的 Oracle 段都有一个在段内容纳数据的上线,即高水位线(high water mark).HWM 是一个标记,很像水库的丽水最高水位,即使表内数据全部删除,HWM 也还 ...
- 477. Total Hamming Distance总的二进制距离
[抄题]: The Hamming distance between two integers is the number of positions at which the correspondin ...
- android开发环境完整搭建
1.首先,要先下载安装包,共享一个网址,里面有非常全面的安装文件,不管是windows还是linux的,都有,网址如下:http://www.cnblogs.com/tc310/p/3938353.h ...
- ECS 游戏架构 理解
转载自:http://blog.csdn.net/i_dovelemon/article/details/25798677 理解 组件-实体-系统 (ECS \CES)游戏编程模型 - 博客频道 ...