文章参考:http://blog.csdn.net/loveme1204/archive/2007/12/24/1964577.aspx
是一篇vb编写的,我只是把它翻译成c#的.
其实Anchor和Dock属性也可以实现,但好象只对容器效果理想,而且字体大小也没有变化.最近论坛上有好多这样的贴子,具体实现代码如下:
当然定义了两个全局变量,private float X; private float Y;
细心的你一定会发现还有个y ;这是因为有statusStrip1之类的控件,这是就一定要注意,窗体的实际宽度和高度一定要减去statusStrip1之类.
如果是容器,最好将Anchor和Dock属性也修改过来.
效果还不错.
帖子:http://topic.csdn.net/u/20080516/13/12a39498-314f-4a7b-a210-6988f79da0f4.htm
在上面程序中,如果不用到控件的tag属性,可以正常运行。否则会带来问题,所以,在此基础上改进了一下
1
private void setOriginControlsSize(Control cons) { foreach (Control con in cons.Controls) { if (con.Name.Length == 0) continue; string strCtlSize = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; dicControls.Add(con.Name, strCtlSize); Console.WriteLine("{0}:{1}", con.Name, strCtlSize); if (con.Controls.Count > 0) setOriginControlsSize(con); } } private void setNewControlsSize(float newx, float newy, Control cons) { foreach (Control con in cons.Controls) { object objCtlSize; Console.WriteLine("{0}", con.Name); if (false == dicControls.TryGetValue(con.Name, out objCtlSize)) continue; Console.WriteLine("{0}", objCtlSize); string[] mytag = objCtlSize.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 System.Drawing.Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); if (con.Controls.Count > 0) { setNewControlsSize(newx, newy, con); } } }