| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 530 人关注过本帖
标题:窗体默认最大化
只看楼主 加入收藏
f2831890
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:115
专家分:107
注 册:2009-11-25
结帖率:96.77%
收藏
 问题点数:0 回复次数:0 
窗体默认最大化
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace _2_end
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private float X; private float Y;

        //获取控件的width、height、left、top、字体大小的值,存放在控件的Tag属性中
        private 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 > 0)
                    setTag(con);
            }
        }

        //根据窗体大小调整控件大小
        private void setControls(float xinX, float xinY, Control cons)
        {
            foreach (Control con in cons.Controls)
            {
                string[] mytag = con.Tag.ToString().Split(new char[] { ';' });
                //获取控件的Tag属性值,并分割后存储字符串数组
                float a = Convert.ToSingle(mytag[0]) * xinX;//根据窗体缩放比例确定控件的值
                con.Width = (int)a;//宽度
                a = Convert.ToSingle(mytag[1]) * xinY;//高度
                con.Height = (int)(a);
                a = Convert.ToSingle(mytag[2]) * xinX;//左边距离
                con.Left = (int)(a);
                a = Convert.ToSingle(mytag[3]) * xinY;//顶端距离
                con.Top = (int)(a);
                Single currentSize = Convert.ToSingle(mytag[4]) * xinY;//字体大小
                con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                if (con.Controls.Count > 0)
                {
                    setControls(xinX, xinY, con);
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Resize += new EventHandler(Form1_Resize);//窗体调整大小时引发事件
            X = this.Width;//获取窗体的宽度
            Y = this.Height;//获取窗体的高度
            setTag(this);//调用方法
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            float xinX = (this.Width) / X;
            float xinY = (this.Height) / Y;//得到窗体缩放的比例
            setControls(xinX, xinY, this);
        }
    }
}
将窗体的默认大小属性windowstate改成了MAX 或者MIN  就会报错
报错信息: string[] mytag = con.Tag.ToString().Split(new char[] { ';' });未将对象引用设置到对象的实例。
如果使用normal 就不会有任何问题
搜索更多相关主题的帖子: namespace private public 
2011-07-13 11:28
快速回复:窗体默认最大化
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.100245 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved