700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C#Winform控件随窗体缩放

C#Winform控件随窗体缩放

时间:2020-12-17 19:55:07

相关推荐

C#Winform控件随窗体缩放

实现步骤:

1.在窗体中放一个容器(例如:Panel),并且将容器的Dock属性设置为Fill。窗体中其他控件都放在这个容器中。

2.创建一个窗体类,该类继承于原始窗体类,并在新建的这个窗体类中添加如下代码,以后创建的窗体都继承于新建的这个窗体类:

#region控件缩放

doubleformWidth;//窗体原始宽度

doubleformHeight;//窗体原始高度

doublescaleX;//水平缩放比例

doublescaleY;//垂直缩放比例

Dictionary<string,string>controlInfo=newDictionary<string,string>();//控件中心Left,Top,控件Width,控件Height,控件字体Size

///<summary>

///获取所有原始数据

///</summary>

protectedvoidGetAllInitInfo(ControlCrlContainer)

{

if(CrlContainer.Parent==this)

{

formWidth=Convert.ToDouble(CrlContainer.Width);

formHeight=Convert.ToDouble(CrlContainer.Height);

}

foreach(ControliteminCrlContainer.Controls)

{

if(item.Name.Trim()!="")

controlInfo.Add(item.Name,(item.Left+item.Width/2)+","+(item.Top+item.Height/2)+","+item.Width+","+item.Height+","+item.Font.Size);

if((itemasUserControl)==null&&item.Controls.Count>0) GetAllInitInfo(item);

}

}

privatevoidControlsChangeInit(ControlCrlContainer)

{

scaleX=(Convert.ToDouble(CrlContainer.Width)/formWidth);

scaleY=(Convert.ToDouble(CrlContainer.Height)/formHeight);

}

privatevoidControlsChange(ControlCrlContainer)

{

double[]pos=newdouble[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Size

foreach(ControliteminCrlContainer.Controls)

{

if(item.Name.Trim()!="")

{

if((itemasUserControl)==null&&item.Controls.Count>0)

ControlsChange(item);

string[]strs=controlInfo[item.Name].Split(',');

for(intj=0;j<5;j++)

{

pos[j]=Convert.ToDouble(strs[j]);

}

doubleitemWidth=pos[2]*scaleX;

doubleitemHeight=pos[3]*scaleY;

item.Left=Convert.ToInt32(pos[0]*scaleX-itemWidth/2);

item.Top=Convert.ToInt32(pos[1]*scaleY-itemHeight/2);

item.Width=Convert.ToInt32(itemWidth);

item.Height=Convert.ToInt32(itemHeight);

item.Font=newFont(item.Font.Name,float.Parse((pos[4]*Math.Min(scaleX,scaleY)).ToString()));

}

}

}

#endregion

3.在新建的窗体类中重写OnSizeChanged事件,并调用ControlsChangeInit和ControlsChange方法,代码如下:

protectedoverridevoidOnSizeChanged(EventArgse)

{

base.OnSizeChanged(e);

if(controlInfo.Count>0)

{

ControlsChangeInit(this.Controls[0]);

ControlsChange(this.Controls[0]);

}

}

4.在窗体的构造函数中调用GetAllInitInfo方法,代码如下:

GetAllInitInfo(this.Controls[0]);

注:原创,转载请指明出处。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。