c# winform 根据窗体自动调整控件
一、概述
本文要实现的功能是:当窗体最大化时,控件的大小可以随窗体一起变化。开发环境,vs2010 c# winform,窗体名称采用默认的Form1.
2、把调整控件大小的方法放到一个类中:FormSetSelfAuto.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing; namespace Kaifafanli
{
public class FormSetSelfAuto
{
private float X;
private float Y;
public float _x
{
set { X = value; }
}
public float _y
{
set { Y = value; }
}
//获取控件的width,height,left,top,字体的大小值,存放在控件的tag属性中
public void setTag(Control cons)
{
//遍历窗体中的控件
foreach(Control con in cons.Controls)
{
con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
if(con.Controls.Count>)
{
setTag(con);
}
}
}
//根据窗体大小调整控件大小
public void setControls(float newx,float newy,Control cons)
{
//遍历窗体中的控件,重新设置控件的值
foreach(Control con in cons.Controls)
{
//获取控件tag属性值,并分割后存储字符串数组
string[] mytag=con.Tag.ToString().Split(new char[]{':'});
float a = Convert.ToSingle(mytag[]) * newx;//根据窗体缩放比例确定控件的宽度值
con.Width = (int)a;
a = Convert.ToSingle(mytag[]) * newy;
con.Height = (int)a;//高度 a = Convert.ToSingle(mytag[]) * newx;
con.Left = (int)a;//左边缘距离
a = Convert.ToSingle(mytag[]) * newy;
con.Top = (int)a;//上边缘距离
Single currentSize = Convert.ToSingle(mytag[]) * newy;
con.Font = new Font(con.Font.Name,currentSize,con.Font.Style,con.Font.Unit);
if(con.Controls.Count>)
{
setControls(newx,newy,con);
} }
}
public void form_Resize(Form fr)
{
float newx = (fr.Width) / X;
float newy = (fr.Height) / Y;
setControls(newx, newy, fr);
fr.Text = fr.Width.ToString() + " " + fr.Height.ToString();
}
}
}
FormSetSelfAuto.cs
3、在窗体Form1中的调用方法
Form1的代码如下所示:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace Kaifafanli
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} FormSetSelfAuto fa = new FormSetSelfAuto();
private void Form1_Load(object sender, EventArgs e)
{
this.Resize += new EventHandler(Form1_Resize);
fa._x = this.Width;
fa._y = this.Height;
fa.setTag(this);
} private void Form1_Resize(object sender, EventArgs e)
{
fa.form_Resize(this);
}
}
}
Form1
c# winform 根据窗体自动调整控件的更多相关文章
- Winform跨窗体操作控件(使用委托)
Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...
- WinForm设置窗体默认控件焦点
winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了. ②Winfor ...
- 根据窗体自动调整控件及文本框记住上次填写内容Demo
第一次写文章,组词难免没有不通之处... 最近常用到Winform根据窗体大小自动调整空间大小及字体.文本框记住上次填写内容待下次输入某一段时候自动跳出上次输入内容.于是就随便把两个问题放到同一个de ...
- winform 跨窗体给控件传值 分类: WinForm 2014-08-02 16:33 195人阅读 评论(0) 收藏
两个窗体 FormA,FormB; FormA窗体中有一文本框控件:TextBox; FormB窗体中有一变量:txtJSJ 目的:把变量赋值给文本框 实现: 设置TextBox属性: Modifie ...
- VS中 Winform查看窗体内控件之间的相互关系
视图----其他窗口----文档大纲 这样可以查看之前的窗体布局关系
- WinForm窗体及其控件的自适应
3步骤: 1.在需要自适应的Form中实例化全局变量 AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...
- Winform 获取当前单击的控件名称 和 向窗体添加控件
Winform如何获取当前单击的控件名称,比如有100个Button 和一个button_Click()的按钮事件 ,分别点击不同按钮后显示所点击的按钮名称?private void button_C ...
- [WinForm] 使用反射将业务对象绑定到窗体或控件容器
在WebForm中,可以使用反射将业务对象绑定到 ASP.NET 窗体控件.最近做Winform项目,也参考WebForm中的代码实现同样的功能. Winform没有提供类似WebForm中的 ...
- 转:C# WinForm窗体及其控件的自适应
一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率> ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...
随机推荐
- vue2.0组件入门
如何定义一个组件 在根目录src/components/文件夹下新建组件的文件夹Footer.vue组件 在Footer.vue中 <template> <div class=&qu ...
- vue.js源码学习分享(八)
/* */ var uid$1 = 0; /** * A dep is an observable that can have multiple * directives subscribing() ...
- WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程(转)
本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine综合应用示例(一)——视频通话的基本流程 WebRTC VideoEngine综合应用示例(二)——集成OPENH264编解码器 ...
- webRTC windows demo1(转)
// setup video engine char cCameraName[MAX_CAMERA_NAME_LENGTH]; memset(cCameraName, , MAX_CAMERA_NAM ...
- Sublime Text 新文本编辑器(txt3)
http://www.sublimetext.com/
- LeetCode OJ——Convert Sorted List to Binary Search Tree
http://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 将一个按照元素升序排列的链表转换成BST.根据自身 ...
- Failed to check the status of the service报错解决
报这个错误是因为我的application_context.service.xml 文件里的的dubbo声明暴露口时的ref属性写错了. <dubbo:service interface=&qu ...
- iOS -- SKEmitterNode类
SKEmitterNode类 继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObje ...
- Activiti 流程部署方式 activi 动态部署(高级源代码篇)
Activiti的流程 部署方式有非常多种方式,我们能够依据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结具体介绍了使用场景. 以下看一下部署 ...
- [转载] C/C++中怎样获取日期和时间
C/C++中怎样获取日期和时间摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时.时间的获取.时间的计算和显示格式等方面进行了阐述.本文还通过大量的 ...