(转)窗体控件随窗体大小改变(包括字体大小)

文章参考:http://blog.csdn.net/loveme1204/archive/2007/12/24/1964577.aspx

是一篇vb编写的,我只是把它翻译成c#的.

其实Anchor和Dock属性也可以实现,但好象只对容器效果理想,而且字体大小也没有变化.最近论坛上有好多这样的贴子,具体实现代码如下:

   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 );  
  }
  
  }
  
  }
  
  
  
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();  
  }
 
在Form_Load里面添加:
   this.Resize += new EventHandler(Form1_Resize);  
  
   X = this.Width;  
   Y = this.Height;  
   y = this.statusStrip1.Height;  
   setTag (this); 

当然定义了两个全局变量,private float X; private float Y;

细心的你一定会发现还有个y ;这是因为有statusStrip1之类的控件,这是就一定要注意,窗体的实际宽度和高度一定要减去statusStrip1之类.

如果是容器,最好将Anchor和Dock属性也修改过来.

效果还不错.

帖子:http://topic.csdn.net/u/20080516/13/12a39498-314f-4a7b-a210-6988f79da0f4.html


posted on 2008-07-17 09:44  冷月孤峰  阅读(328)  评论(0)    收藏  举报