winform 重载Form类 窗体控件能自动按比例显示
作者:Lynn 日期:2009-10-30
winform 重载Form类 窗体控件能自动按比例显示
在我们开发桌面软件时,我们常碰到窗体的大小是不固定的,在用户拉升缩放form的时候,一些控件就看不到了.整个form的内容都随之变形走样了.为了适应开发的需求,对Form基类进行了重载.这样就可以实现
winform 重载Form类 窗体控件能自动按比例显示
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Text;
namespace System.Windows.Forms
{
public class GoodForm:Form
{
double formoldwidth; //窗体原始宽度
double formoldheight; //窗体原始高度
protected override void OnLoad(EventArgs e)
{
base.OnResize(e);
double scalewh; //控件宽高比
formoldwidth = (double)this.Width;
formoldheight = (double)this.Height;
foreach (Control ctrl in this.Controls)
{
scalewh = (double)ctrl.Width / (double)ctrl.Height;
ctrl.Tag = ctrl.Left + " " + ctrl.Top + " " + ctrl.Width + " " + scalewh.ToString() + " "; //将控件的Left,Top,Width,宽高比放入控件的Tag内
}
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
double scalex; //水平伸缩比
double scaley; //垂直伸缩比
long i;
int temppos;
string temptag;
double[] pos = new double[4]; //pos数组保存当前控件的left,top,width,height
scalex = (double)this.Width / formoldwidth;
scaley = (double)this.Height / formoldheight;
foreach (Control ctrl in this.Controls)
{
if (ctrl.Tag != null)
{
temptag = ctrl.Tag.ToString();
for (i = 0; i <= 3; i++)
{
temppos = temptag.IndexOf(" ");
if (temppos > 0)
{
pos[i] = Convert.ToDouble(temptag.Substring(0, temppos)); //从Tag中取出参数
temptag = temptag.Substring(temppos + 1);
}
else
pos[i] = 0;
}
ctrl.Left = (int)(pos[0] * scalex);
ctrl.Top = (int)(pos[1] * scaley);
ctrl.Width = (int)(pos[2] * scalex);
ctrl.Height = (int)((double)ctrl.Width / pos[3]); //高度由宽高比算出
}
}
}
}
}
上一篇
下一篇

文章来自:
Tags: