日期:2014-05-17  浏览次数:20923 次

c#窗体控件大小设置
   我的c#窗体程序有toolStrip(上面),tabControl(左边)和richtextbox(右下角),有点像ppt的形式,想要达到的效果是窗体最大化时控件随之变大,通过设置Dock和Anchor属性,toolStrip没有问题,可是tabControl和richtextbox死活变不了
   
   Dock设成fill时,Anchor就自动变成top和left了,修改Anchor后Dock有自动成none了。。。。!!!
   其他的组合我也全部试了就是不行?!为什么啊?!

------解决方案--------------------
在客户区放一个TableLayoutPanel,Dock设置为fill
然后让这个TabLayoutPanel为1行2列,在左边放入TabControl,右边放入RichTextBox,分别Dock为Fill。
------解决方案--------------------
引用:
在客户区放一个TableLayoutPanel,Dock设置为fill
然后让这个TabLayoutPanel为1行2列,在左边放入TabControl,右边放入RichTextBox,分别Dock为Fill。

+1
------解决方案--------------------
Dock和Anchor本来就不能同时设置,设置其中一个,另一个自动变成默认值
------解决方案--------------------
2L的办法应该改为2行2列,左边一列合并,这样才能实现richtextbox(右下角)的需求
------解决方案--------------------
这个不知道对你是否有用,可以看一下:http://my.csdn.net/xuezhe521/code/detail/19893
算了,我还是贴代码吧

分三步:
1.控件必须放在一个panel中(可能其他也行,没试。。。);
2.from类中添加一个函数,并添加form的sizechanged事件,如下:
 
public void AutoResize(Form frm)
        {
            frm.Tag = frm.Width.ToString() + "," + frm.Height.ToString();
            frm.SizeChanged += new EventHandler(Form1_SizeChanged);
        }
 
事件如下:
 
private void Form1_SizeChanged(object sender, EventArgs e)
        {
            string[] tmp = ((Form)sender).Tag.ToString().Split(',');
            float width = (float)((Form)sender).Width / (float)Convert.ToInt16(tmp[0]);
            float heigth = (float)((Form)sender).Height / (float)Convert.ToInt16(tmp[1]);
 
            ((Form)sender).Tag = ((Form)sender).Width.ToString() + "," + ((Form)sender).Height;
 
            foreach (Control control in ((Form)sender).Controls)
            {
                control.Scale(new SizeF(width, heigth));
            }
        }
 
3.在构造函数中调用AutoResize函数,如下:
 
public Form1()
        {
            InitializeComponent();
            AutoResize(this);//函数调用
        }

------解决方案--------------------
panel  然后fill