• 如果有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心得的更多相关文章

  1. WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信

    原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...

  2. RFID的winform程序心得2

    RFID的winform程序心得1 webBrowser1.AllowWebBrowserDrop = false;//将 WebBrowser 控件的 AllowWebBrowserDrop 属性设 ...

  3. RFID的winform程序心得1

    /// 根据日期获取当周星期一 /// </summary> /// <param name="dt"></param> /// <ret ...

  4. winform 开发心得~

    winform自适应不同分辨率 不同dpi 1.窗体AutoScaleMode属性 使用None 2.自定义控件 AutoScaleMode 使用Inherit 3.所有控件窗体字体使用px为单位

  5. C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用心得

    在网上查了很多,发现没有讲述关于--C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用--的资料 自己研究了一个使用方法.下面来看看. 我有两个窗体:LOGINFRM,M ...

  6. C# WinForm 第一个项目控件使用心得

    1.控件心得 1.1 基础控件 panel 作用:布局 难点:重绘边框改变颜色 重绘panel里如果有fill填充控件 panle的padding要改个值 private void pnlPaintB ...

  7. C# winform 编程 向ACCESS数据库导入EXCEL表使用心得

    public string MyConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ErLake.mdb&quo ...

  8. Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解

    最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相 ...

  9. WCF学习心得----(四)服务承载

    WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...

随机推荐

  1. Android MVP模式简单易懂的介绍方式 (一)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...

  2. nginx基本配置与参数说明-【转】

    #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...

  3. 使用crontab设置定时任务

    配置文件 crontab主要的配置文件如下: /etc/crontab:系统cron表 /etc/cron.d/*:保存由软件包安装脚本创建的cron文件的目录 /var/spool/cron/*:保 ...

  4. Python nonlocal 与 global 关键字解析

    nonlocal 首先,要明确 nonlocal 关键字是定义在闭包里面的.请看以下代码: x = 0 def outer(): x = 1 def inner(): x = 2 print(&quo ...

  5. 微信公众号token 验证

    1. 首先给出测试项目的整体目录: 2. CoreServlet类: 当get请求的时候会执行get方法,post请求的时候会执行post方法,分别来处理不同的请求 package com.zjn.s ...

  6. swarmkit

    SwarmKit是用于在任何规模上编排分布式系统的工具包. 它包括节点发现的原语,基于raft的共识,任务调度等. 其主要优点是: 分布式:SwarmKit使用raft共识算法来协调,不依赖单一故障点 ...

  7. 【总结整理】UGC内容

    除了内容了产品,还有什么适合引入UGC? :引发讨论,诱导参与,然后促成销售. User Generated Content,也就是用户生成内容的意思. 购买类产品,内容催生购买 1.为用户购买提供思 ...

  8. 爬虫解析:XPath总结

    1.加载 XML 文档 所有现代浏览器都支持使用 XMLHttpRequest 来加载 XML 文档的方法. 针对大多数现代浏览器的代码: var xmlhttp=new XMLHttpRequest ...

  9. Crack IDEA

    使用破解补丁 Crack IDEA→在http://idea.lanyus.com/上可以找到最新的破解补丁,下载并放到软件的bin目录下 →更改bin目录下的两个文件:Idea.exe.vmopti ...

  10. 手动编译cloudfoundry

    1.下载cloudfoundry源代码 git clone 2.BOSH的官方定义 BOSH是一个针对大规模分布式系统的部署和生命周期管理的开源工具,其基础是"a tool of relea ...