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学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...
随机推荐
- i++的原子性问题
一.什么是原子性 简单的可以理解为:操作是不可再分割的,比如: int i=0; 但是i++的操作是可以再分的,比如: i++ //分解后 i=i+i 上面的代码在多线程环境下取值是有问题的,比如: ...
- STL : 反向迭代器(Reverse Iterator)
1. 定义反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器.也就是,从最后一个元素到第一个元素遍历容器.反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问 ...
- jBPM4.4 eclipse插件安装
一.工具下载 jBPM 图形化流程设计器采用eclipse做为平台,我们可以先到jBPM官方网站下jBPM4.4,地址:http://sourceforge.net/projects/jbpm ...
- Coursera连接不上(视频无法播放),修改hosts文件
视频问题 如果Coursera网站连接不上,或者视频加载不出来.可以通过如下方式进行配置: 一.找到hosts文件 Windows 系统, hosts文件位于: [C:\Windows\Syste ...
- elasticsearch中的mapping简介
默认mapping elasticsearch(以下简称ES)是没有模式(schema)的,当我们执行以下命令: curl -d '{"name":"zach" ...
- default of c#
[default of c#] 在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T: T 是引用类型还是值类型. 如果 T 为值类型,则它是数值还是结构. 给 ...
- ArcGIS js api开发环境配置
转自https://blog.csdn.net/lovecarpenter/article/details/53713481#3%E9%85%8D%E7%BD%AEarcgis-api%E5%AE%9 ...
- 一款比较好用的JS时间控件-laydate
官方讲解:http://laydate.layui.com/ 具体的内容请看官方讲解,此处仅说名应用: 1.在jsp或html或其他中引入laydate.js <script src=&qu ...
- Linux 设置默认编辑器(以nano为例)
查看nano地址 which nano output: /usr/bin/nano 设置默认编辑器 nano ~/.bashrc export EDITOR=nano alias vi=/usr/bi ...
- Java编程规范参考
谷歌Java编程规范-原版 谷歌Java编程规范-中文翻译版 阿里巴巴Java编程规范 阿里巴巴Java编程规范-IDEA 插件 阿里巴巴Java编程规范-Eclipse 插件