日期:2014-05-18  浏览次数:20916 次

C#界面大小改变问题
界面的最大SIZE和最小SIZE是没有设置的,因为我需要界面变化,当我点击一个按钮时做以下处理  
C# code

            this.MaximizeBox = true;
            this.MaximumSize = new System.Drawing.Size(643, 478);
            this.Size = this.MaximumSize;
            this.MinimumSize = this.MaximumSize;
            this.panel.Size = new System.Drawing.Size(603, 330);
            this.MaximizeBox = false;
            this.panel.Controls.Add(textBox1);


当我再次点击按钮时做下面处理
C# code

            this.MaximizeBox = false;
            this.MaximumSize = new System.Drawing.Size(643, 427);
            this.Size = this.MaximumSize;
            this.panel.Controls.Remove(textBox1);
            this.panel.Size = new System.Drawing.Size(603, 279);


但是有问题,第一次点击按钮界面是变大了,PANEL也变大了,文本框也加上了,再次点击按钮的时候,那个PANEL是变小了,但是界面不变,还是加文本框后的大小,请问为什么?难道实现的不对么?

------解决方案--------------------
private void ResizeInit(Form frm)
{
oldFrmWidth = frm.Width;
oldFrmHeight = frm.Height;

foreach (Control control in frm.Controls)
{
control.Tag = control.Left.ToString() + "," + control.Top.ToString() + ","
+ control.Width.ToString() + "," + control.Height.ToString();
}
}


private void MainForm_SizeChanged(object sender, EventArgs e)
{
float ScaleX;
float ScaleY;

Form f = (Form)sender;

ScaleX = (float)f.Width / oldFrmWidth;
ScaleY = (float)f.Height / oldFrmHeight;

venuesControl1.setSize(ScaleX, ScaleY);

foreach (Control c in f.Controls)
{
string[] tmp = c.Tag.ToString().Split(',');
c.Left = (int)(Convert.ToInt16(tmp[0]) * ScaleX);
c.Top = (int)(Convert.ToInt16(tmp[1]) * ScaleY);
c.Width = (int)(Convert.ToInt16(tmp[2]) * ScaleX);
c.Height = (int)(Convert.ToInt16(tmp[3]) * ScaleY);
}

}

load里面添加ResizeInit(this);
------解决方案--------------------
探讨
但是我打断点试过了啊,确实有问题的,当我再次点击按钮的时里的代码有问题,this.MaximumSize = new System.Drawing.Size(643, 427);this.Size = this.MaximumSize;这2断代码执行过后,SIZE不变,依然原来大小。。我感到很奇怪的。。为什么重新赋值后还是原来大小的。。