C# Winform 自适应
参考: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 自适应的更多相关文章
- winform 自适应屏幕分辨率具体操作和注意事项
第一步:先借助一个类文件 AutoSizeFormClass.cs class AutoSizeFormClass { public struct controlRect { public int L ...
- winform 开发心得~
winform自适应不同分辨率 不同dpi 1.窗体AutoScaleMode属性 使用None 2.自定义控件 AutoScaleMode 使用Inherit 3.所有控件窗体字体使用px为单位
- C#关于控件的上下左右移动
C#怎么让控件上下左右移动?(转) http://wenwen.sogou.com/z/q231436494.htm 在winform中捕获上下左右键等控制键的按键事件(转) http://blog. ...
- 【接上一篇】winform中dataGridView高度和宽度自适应填充完数据的高度和宽度,即dataGridView根据数据自适应大小
上一篇:winform中dataGridView高度自适应填充完数据的高度 winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度 ...
- [WPF]建立自适应窗口大小布局的WinForm窗口
编写WinForm程序时,都会碰到一个问题.就是WinForm窗口在不同分辨率下的大小问题.举例说明,你编写的WinForm窗口在1024×768下是合适.匀称的.不过,如果用户的计算机的分辨率为14 ...
- winform中dataGridView高度自适应填充完数据的高度
// winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度是根据数据的多少而变动. 在load的时候,数据绑定后,加上如下代码: ...
- [Winform]DataGridView列自适应宽度
引言 在做winform项目中,数据控件DataGridView的使用多多少少是会用到的,如果不设置它的属性,默认情况下是不会自适应宽度的,你想查看某项的数据,就不得不将标题栏拖来拖去,挺烦的. 方法 ...
- WinForm窗体及其控件的自适应
3步骤: 1.在需要自适应的Form中实例化全局变量 AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...
- Winform窗体控件自适应大小
自己写的winform窗体自适应大小代码,代码比较独立,很适合贴来贴去不会对原有程序造成影响,可以直接继承此类或者把代码复制到自己的代码里面直接使用 借鉴了网上的一些资料,最后采用重写WndProc方 ...
随机推荐
- JavaScript中的转译符
转译字符 含义 \o NUL字符(\u0000) \b 退格符(\u0008) \t 水平制表符(\u0009) \n 换行符(\u000A) \v 垂直制表符(\u000B) \f 换页符( ...
- centos安装mariadb
一 配置mariadb官方的yum源 1.进入yum仓库 /etc/yum.repos.d/目录下 手动创建一个 mariadb.repo 写入如下内容 [mariadb] name = Maria ...
- react中对于context的理解
一.context旧版的基本使用 1.context的理解 当不想在组件树中通过逐层传递props或state的方式来传递数据时,可使用context来实现跨层级的组件数据传递. 2.context的 ...
- oracle 对表的操作
对日期数据的插入 insert into tabname(datecol) value(sysdate) ; -- 用date值 insert into tabname(datecol) value ...
- shell的打印菜单
#!/bash/bin cat << EOF #EOF是变量,可随便设置,但标准是EOF 1)hello world. 2)你好,世界. EOF
- HBase根据Rowkey批量查询数据JAVA API(一次查多条,返回多个记录)
最近在生产中遇到了一个需求,前台给我多个rowkey的List,要在hbase中查询多个记录(返回给前台list).在网上也查了很多,不过自己都不太满意,filter的功能有可能查询结果不是准确值,而 ...
- ES6常用语法(上)
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...
- jenkins 配置
配置: echo " aliyun.oss.access.key=LTAIz4Koeff8sCr8 " > ./src/main/resources/oss.dev.prop ...
- 调参贝叶斯优化(BayesianOptimization)
from sklearn.datasets import make_classification from sklearn.model_selection import cross_val_score ...
- List集合流处理类型小结
本文为博主原创,未经允许不得转载 对应实体类 import lombok.Getter; import lombok.Setter; @Getter @Setter public class Stud ...