ColinOL

A Small Website

用户工具

站点工具


wiki:csharp:winform-ng-zsh-ctds-winform-kj

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

wiki:csharp:winform-ng-zsh-ctds-winform-kj [2018/02/03 15:42] (当前版本)
行 1: 行 1:
 +====== 能够自适应窗体大小的WinForm 控件 ======
  
 +<code csharp>
 +//​窗体初始化
 +public frmAutoSketch()
 +{
 +InitializeComponent();​
 +//​在窗体中放一个容器(例如:Panel),并且将容器的Dock属性设置为Fill。窗体中其他控件都放在这个容器中。
 +    this.panel_AutoSketch.Dock = DockStyle.Fill;​
 +    GetAllInitInfo(this.panel_AutoSketch);​
 +    this.SizeChanged += frmSketchFormcs_SizeChanged;​
 +}
 +//​窗体大小更改时更新空间大小
 +void frmSketchFormcs_SizeChanged(object sender, EventArgs e)
 +{
 +    if (controlInfo.Count > 0)
 +    {
 +        ControlsChangeInit(this.Controls[0]);​
 +        ControlsChange(this.Controls[0]);​
 +    }
 +}
 +#region 控件缩放
 +double formWidth;//​窗体原始宽度
 +double formHeight;//​窗体原始高度
 +double scaleX;//​水平缩放比例
 +double scaleY;//​垂直缩放比例
 +Dictionary<​string,​ string> controlInfo = new Dictionary<​string,​ string>​();//​控件中心Left,​Top,​控件Width,​控件Height,​控件字体Size
 +/// <​summary>​
 +/// 获取所有原始数据
 +/// </​summary>​
 +private void GetAllInitInfo(Control CrlContainer)
 +{
 +    if (CrlContainer.Parent == this)
 +    {
 +        formWidth = Convert.ToDouble(CrlContainer.Width);​
 +        formHeight = Convert.ToDouble(CrlContainer.Height);​
 +    }
 +    foreach (Control item in CrlContainer.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 ((item as UserControl) == null && item.Controls.Count > 0)
 +            GetAllInitInfo(item);​
 +    }
 +}
 +private void ControlsChangeInit(Control CrlContainer)
 +{
 +    scaleX = (Convert.ToDouble(CrlContainer.Width) / formWidth);
 +    scaleY = (Convert.ToDouble(CrlContainer.Height) / formHeight);​
 +}
 +private void ControlsChange(Control CrlContainer)
 +{
 +    double[] pos = new double[5];//​pos数组保存当前控件中心Left,​Top,​控件Width,​控件Height,​控件字体Size
 +    foreach (Control item in CrlContainer.Controls)
 +    {
 +        if (item.Name.Trim() != ""​)
 +        {
 +            if ((item as UserControl) == null && item.Controls.Count > 0)
 +                ControlsChange(item);​
 +            string[] strs = controlInfo[item.Name].Split(','​);​
 +            for (int j = 0; j < 5; j++)
 +            {
 +                pos[j] = Convert.ToDouble(strs[j]);​
 +            }
 +            double itemWidth = pos[2] * scaleX;
 +            double itemHeight = 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 = new Font(item.Font.Name,​ float.Parse((pos[4] * Math.Min(scaleX,​ scaleY)).ToString()));​
 +        }
 +    }
 +}
 +#endregion
 +
 +</​code>​
wiki/csharp/winform-ng-zsh-ctds-winform-kj.txt · 最后更改: 2018/02/03 15:42 (外部编辑)