标题:窗体和控件的大小整体变化 代码纠错
只看楼主
f2831890
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:115
专家分:107
注 册:2009-11-25
结帖率:96.77%
已结贴  问题点数:20 回复次数:4 
窗体和控件的大小整体变化 代码纠错
程序代码:
using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        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 newx, float newy, Control cons)
        {
            foreach (Control con in cons.Controls)
            {

                string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
                float a = Convert.ToSingle(mytag[0]) * newx;
                con.Width = (int)a;
                a = Convert.ToSingle(mytag[1]) * newy;
                con.Height = (int)(a);
                a = Convert.ToSingle(mytag[2]) * newx;
                con.Left = (int)(a);
                a = Convert.ToSingle(mytag[3]) * newy;
                con.Top = (int)(a);
                Single currentSize = Convert.ToSingle(mytag[4]) * newy;
                con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                if (con.Controls.Count > 0)
                {
                    setControls(newx, newy, con);
                }
            }
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            // throw new Exception("The method or operation is not implemented."); 
            float newx = (this.Width) / X;
            //  float newy = (this.Height - this.statusStrip1.Height) / (Y - y); 
            float newy = this.Height / Y;
            setControls(newx, newy, this);
            this.Text = this.Width.ToString() + " " + this.Height.ToString(); 
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Resize += new EventHandler(Form1_Resize);

            X = this.Width;
            Y = this.Height;
            x = this.statusStrip1.Width;
            y = this.statusStrip1.Height;
            setTag(this);
        } 
    }
}
代码出现 “未对对象引用实例”错误、、、、、
不知道该怎么修改。。。

2011-08-10 10:34
guang
Rank: 4
来 自:广东深圳
等 级:贵宾
威 望:13
帖 子:1414
专家分:285
注 册:2006-4-3
得分:20 
private void Form1_Load(object sender, EventArgs e)
        {
            X = this.Width;
            Y = this.Height;
            x = this.statusStrip1.Width;
            y = this.statusStrip1.Height;
            setTag(this);
            this.Resize += new EventHandler(Form1_Resize);//这句需放到setTag的后面,因为Form1_Resize事件触发时控件的Tag属性为null
        }

不相信未作牺牲竟先可拥有,只相信靠双手找到我的欲求!!
我的博客:http://liao5930.blog.
2011-08-10 10:56
f2831890
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:115
专家分:107
注 册:2009-11-25
得分:0 
回复 2楼 guang
还是不行 错误是相同的   
 string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
“未将对象引用设置到对象的实例。”

QQ:412869766
2011-08-10 11:04
guang
Rank: 4
来 自:广东深圳
等 级:贵宾
威 望:13
帖 子:1414
专家分:285
注 册:2006-4-3
得分:0 
你看看Resize事件是不是在属性窗口那边已经绑定了?

不相信未作牺牲竟先可拥有,只相信靠双手找到我的欲求!!
我的博客:http://liao5930.blog.
2011-08-10 11:29
f2831890
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:115
专家分:107
注 册:2009-11-25
得分:0 
回复 4楼 guang
问题找到了  窗体的属性 不能设置为启动后 最大化显示
windowState 不能设置为MAX  
如果我想窗体启动最大化  也就是windowState 设置为MAX  怎么样才能让控件跟着变化呢?

QQ:412869766
2011-08-10 11:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-347212-1-1.html




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

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