文章类型: .NET
关键词: C#,Winform,窗体,各个控件,同比例,自动放缩大小,完美解决
内容摘要: 对于C#的Winform中实现窗体中的各个控件同比自动放缩大小,查了不少资料,终于找到了一个满意的解决方案。分享给大家,非常完美哦,实现如下

C#的WinForm开发中完美解决窗体中的各个控件同比自动放缩大小

2016/1/22 19:11:34    来源:apple    阅读:

对于C#的Winform实现窗体中的各个控件同比自动放缩大小,查了不少资料,终于找到了一个满意的解决方案,非常完美哦。分享给大家,实现如下:

实现方式主要是利用panel控件为主题,对于每个控件的大小位置和字体这几个属性进行记录,然后根据窗体改变的大小同时放缩。

效果图如下:

实现效果图

简要步骤如下:

1、创建C#窗体程序项目。
2、Panel放置到窗体。
3、设置属性dock为fill。
4、注意MinnumSize不能设置为0, 改成大于0都行。

代码如下:

 public partial class UserLogin : Form
{
    double dFrmWidth;
    double dFrmHeight;
    double dZoomHorizon;
    double dZoomVerticality;
    Dictionary<string, string> dicControlsAttribute = new Dictionary<string, string>();

    protected void GetAllInitiateContrlInfo(Control CrlContainer)
    {
        if (CrlContainer.Parent == this)
        {
            dFrmWidth = Convert.ToDouble(CrlContainer.Width);
            dFrmHeight = Convert.ToDouble(CrlContainer.Height);
        }
        foreach (Control item in CrlContainer.Controls)
        {
            if (item.Name.Trim() != "")
                dicControlsAttribute.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)
                GetAllInitiateContrlInfo(item);
        }
    }

    private void ChangeControlsInitiate(Control CrlContainer)
    {
        dZoomHorizon = (Convert.ToDouble(CrlContainer.Width) / dFrmWidth);
        dZoomVerticality = (Convert.ToDouble(CrlContainer.Height) / dFrmHeight);
    }

    private void ChangeCurrentControlAttr(Control CrlContainer)
    {
        double[] dPosition = new double[5];
        foreach (Control item in CrlContainer.Controls)
        {
            if (item.Name.Trim() != "")
            {
                if ((item as UserControl) == null && item.Controls.Count > 0)
                    ChangeCurrentControlAttr(item);
                string[] strs = dicControlsAttribute[item.Name].Split(',');
                for (int j = 0; j < 5; j++)
                {
                    dPosition[j] = Convert.ToDouble(strs[j]);
                }
                double itemWidth = dPosition[2] * dZoomHorizon;
                double itemHeight = dPosition[3] * dZoomVerticality;
                item.Left = Convert.ToInt32(dPosition[0] * dZoomHorizon - itemWidth / 2);
                item.Top = Convert.ToInt32(dPosition[1] * dZoomVerticality - itemHeight / 2);
                item.Width = Convert.ToInt32(itemWidth);
                item.Height = Convert.ToInt32(itemHeight);
                //item.Font = new Font(item.Font.Name, float.Parse  
                //((dPosition[4] * Math.Min(dZoomHorizon, dZoomVerticality)).ToString()));  
                //字体也可以实现同比放缩。  
            }
        }
    }
    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);
        if (dicControlsAttribute.Count > 0)
        {
            ChangeControlsInitiate(this.Controls[0]);
            ChangeCurrentControlAttr(this.Controls[0]);
        }
    }   
  

    public UserLogin()
    {
        InitializeComponent();
        txtUserID.Height = 200;
        GetAllInitiateContrlInfo(this.Controls[0]);//构造函数里面调用即可。
    }
}


↑ 上一篇文章:C#的WinForm开发中AutoComplete 输入提示、自动补全 关键词:C#,CSharp,WinForm,TextBox,Au.. 发布日期:2016/1/21 21:08:31
↓ 下一篇文章:C#实现百度站长平台_链接提交_主动提交推送的POST推送功能 关键词:C#,百度,站长平台,链接提交,主动推送,POST推送 发布日期:2016/1/23 12:37:09
相关文章:
c#的WinForm开发中控件DataGridView的嵌套绑定解决办法 关键词:c#,WinForm,DataGridView,嵌套绑定,解决办法 发布日期:2016-01-27 01:55
Winform中ListView鼠标移动使用ToolTip动态显示信息 关键词:C#,Winform,ListView,鼠标移动,ToolTip,动态,显示,位置,信息 发布日期:2015-07-21 16:05
C# yyyyMMdd类型字符串转换为datetime 类型与该字符串未被识别为有效的DateTime的问题 关键词:Winform,C#,yyyyMMdd,字符串转换,datetime,该字符串未被识别为有效的D.. 发布日期:2016-02-21 23:45
相关目录:.NET
我要评论
正在加载评论信息......