参考:http://yefenme.blog.163.com/blog/static/13069770420132283644288/

自适应首先考虑的是AutoScaleMode属性设置,其中=DPI对于图片控件来说很有效果,但是其他的就没用了,因此用参考文章中的帮助类AutoSizeFormClass。

  但是在实际应用中发现控件都乱了,一时没找到具体问题所在。后来细细看来,发现我的代码中有动态添加的控件,而参考文章中的初始化获取控件Size是在FormLoad中进行调用controllInitializeSize()的,导致控件数目不对。在动态添加控件时进行获取就可以达到想要的效果。

  但是对于一些Label等控件显示大小与Width,Height值没有关系,只是和Font.Size大小相关,因此还需要特殊处理一番,添加方法如下:

Dictionary<string, List <int>> dgvCols = new Dictionary<string, List<int>>();
Dictionary<string, float> LabelFonts = new Dictionary<string, float>();
Dictionary<string, float> RadioButtonFonts = new Dictionary<string, float>();
public void controllInitializeSize_Special(Control mForm)
{
AddControlInfo_Special(mForm);
}
private void AddControlInfo_Special(Control ctl)
{
foreach (Control c in ctl.Controls)
{
      if (c.Controls.Count > )
AddControlInfo_Special(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用
  if (c is SkinDataGridView )
            {
              SkinDataGridView dgv = c as SkinDataGridView;
  List<int> columnsWidth = new List<int>();
              for (int col = ; col < dgv.Columns.Count; col++)
   {
                columnsWidth.Add(dgv.Columns[col].Width);
  }
  dgvCols.Add(c.Name, columnsWidth);
            }
        if (c is Label)
          {
            Label label = c as Label;
float size = label.Font.Size;
LabelFonts.Add(label.Name, size);
          }
        if (c is RadioButton )
          {
  RadioButton rdb = c as RadioButton;
float size = rdb.Font.Size;
RadioButtonFonts.Add(rdb.Name, size);
          }
      }
    }

在Form_Load中调用即可。这样就完美解决了自适应问题。

C# Winform 自适应的更多相关文章

  1. winform 自适应屏幕分辨率具体操作和注意事项

    第一步:先借助一个类文件 AutoSizeFormClass.cs class AutoSizeFormClass { public struct controlRect { public int L ...

  2. winform 开发心得~

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

  3. C#关于控件的上下左右移动

    C#怎么让控件上下左右移动?(转) http://wenwen.sogou.com/z/q231436494.htm 在winform中捕获上下左右键等控制键的按键事件(转) http://blog. ...

  4. 【接上一篇】winform中dataGridView高度和宽度自适应填充完数据的高度和宽度,即dataGridView根据数据自适应大小

    上一篇:winform中dataGridView高度自适应填充完数据的高度 winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度 ...

  5. [WPF]建立自适应窗口大小布局的WinForm窗口

    编写WinForm程序时,都会碰到一个问题.就是WinForm窗口在不同分辨率下的大小问题.举例说明,你编写的WinForm窗口在1024×768下是合适.匀称的.不过,如果用户的计算机的分辨率为14 ...

  6. winform中dataGridView高度自适应填充完数据的高度

    // winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度是根据数据的多少而变动. 在load的时候,数据绑定后,加上如下代码: ...

  7. [Winform]DataGridView列自适应宽度

    引言 在做winform项目中,数据控件DataGridView的使用多多少少是会用到的,如果不设置它的属性,默认情况下是不会自适应宽度的,你想查看某项的数据,就不得不将标题栏拖来拖去,挺烦的. 方法 ...

  8. WinForm窗体及其控件的自适应

    3步骤: 1.在需要自适应的Form中实例化全局变量   AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...

  9. Winform窗体控件自适应大小

    自己写的winform窗体自适应大小代码,代码比较独立,很适合贴来贴去不会对原有程序造成影响,可以直接继承此类或者把代码复制到自己的代码里面直接使用 借鉴了网上的一些资料,最后采用重写WndProc方 ...

随机推荐

  1. python 开发练习之 监控

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设 ...

  2. Java SE中的Synchronized

    1 引言 在多线程并发的编程中Synchronized一直是元老级的角色,很多人会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化以后,有些情况下它并不那么重了. ...

  3. console.log在IE浏览器中会有异常

    因为在IE浏览器无此方法,故此重写 方法一: var console = console || { log: function () { return false; } }; 方法二:window.c ...

  4. C sharp #001# hello world

    饮水思源:金老师的自学网站 索引 编写一个简单的控制台程序. 日期计算的结构化编程实现 日期计算机面向对象编程实现 直接应用已有组件 1.编写一个简单的控制台程序. using System; usi ...

  5. MapReduce编程模型简介和总结

    MapReduce应用广泛的原因之一就是其易用性,提供了一个高度抽象化而变得非常简单的编程模型,它是在总结大量应用的共同特点的基础上抽象出来的分布式计算框架,在其编程模型中,任务可以被分解成相互独立的 ...

  6. MSSQL 漏洞利用与提权

    1.SA口令的获取 webshell或源代码的获取 源代码泄露 嗅探(用CAIN等工具嗅探1433数据库端口) 口令暴力破解 2.常见SQL server 提权命令 查看数据库的版本(select @ ...

  7. android开发_Eclipse新建项目+新建模拟器

    一.新建项目 1 Eclipse->右键->new->Android Application Project,得到下图: 2 输入创建项目信息 3 点击next 4 点击 next ...

  8. bzoj2194 快速傅立叶之二 ntt

    bzoj2194 快速傅立叶之二 链接 bzoj 思路 对我这种和式不强的人,直接转二维看. 发现对\(C_k\)贡献的数对(i,j),都是右斜对角线. 既然贡献是对角线,我们可以利用对角线的性质了. ...

  9. SQL实践遇到的知识点

    聚集函数count() count()统计元组的个数,即行数 count(0).count(1)与count(*)的执行效率是一样的 count(column)与count(*) 如果column中含 ...

  10. LintCode 1.A+B的问题

    LintCode 1.A+B的问题 描述 给出两个整数 a 和 b , 求他们的和. 答案 public class Solution { /** * @param a: An integer * @ ...