乙:用splitter呢,上面放一个,下面放一个,richtextbox也是上面一个
,下面一个。改变大小可以通过sizechanged事件来处理,
不过如果有更高的要求,喂,丙,你来接手吧

解决方案 »

  1.   

    你先将richtextbox1的dock属性设为top,家一个splitter,将它的dock属性
    设为top,然后加一个richtextbox2,将它的dock属性设为client,不就可以达到你要求的效果吗?
      

  2.   

    对,参照楼上的说法,
    richTextBox是可以一点一点靠下来的,如下代码,
    private void InitializeComponent()
    {
    this.richTextBox1 = new System.Windows.Forms.RichTextBox();
    this.splitter1 = new System.Windows.Forms.Splitter();
    this.richTextBox2 = new System.Windows.Forms.RichTextBox();
    this.splitter2 = new System.Windows.Forms.Splitter();
    this.richTextBox3 = new System.Windows.Forms.RichTextBox();
    this.splitter3 = new System.Windows.Forms.Splitter();
    this.richTextBox4 = new System.Windows.Forms.RichTextBox();
    this.SuspendLayout();
    // 
    // richTextBox1
    // 
    this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Top;
    this.richTextBox1.Name = "richTextBox1";
    this.richTextBox1.Size = new System.Drawing.Size(292, 56);
    this.richTextBox1.TabIndex = 4;
    this.richTextBox1.Text = "richTextBox1";
    // 
    // splitter1
    // 
    this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
    this.splitter1.Location = new System.Drawing.Point(0, 56);
    this.splitter1.Name = "splitter1";
    this.splitter1.Size = new System.Drawing.Size(292, 3);
    this.splitter1.TabIndex = 5;
    this.splitter1.TabStop = false;
    // 
    // richTextBox2
    // 
    this.richTextBox2.Dock = System.Windows.Forms.DockStyle.Top;
    this.richTextBox2.Location = new System.Drawing.Point(0, 59);
    this.richTextBox2.Name = "richTextBox2";
    this.richTextBox2.Size = new System.Drawing.Size(292, 109);
    this.richTextBox2.TabIndex = 6;
    this.richTextBox2.Text = "richTextBox2";
    // 
    // splitter2
    // 
    this.splitter2.Dock = System.Windows.Forms.DockStyle.Top;
    this.splitter2.Location = new System.Drawing.Point(0, 168);
    this.splitter2.Name = "splitter2";
    this.splitter2.Size = new System.Drawing.Size(292, 3);
    this.splitter2.TabIndex = 7;
    this.splitter2.TabStop = false;
    // 
    // richTextBox3
    // 
    this.richTextBox3.Dock = System.Windows.Forms.DockStyle.Left;
    this.richTextBox3.Location = new System.Drawing.Point(0, 171);
    this.richTextBox3.Name = "richTextBox3";
    this.richTextBox3.Size = new System.Drawing.Size(100, 102);
    this.richTextBox3.TabIndex = 9;
    this.richTextBox3.Text = "richTextBox3";
    // 
    // splitter3
    // 
    this.splitter3.Location = new System.Drawing.Point(100, 171);
    this.splitter3.Name = "splitter3";
    this.splitter3.Size = new System.Drawing.Size(3, 102);
    this.splitter3.TabIndex = 10;
    this.splitter3.TabStop = false;
    // 
    // richTextBox4
    // 
    this.richTextBox4.Dock = System.Windows.Forms.DockStyle.Fill;
    this.richTextBox4.Location = new System.Drawing.Point(103, 171);
    this.richTextBox4.Name = "richTextBox4";
    this.richTextBox4.Size = new System.Drawing.Size(189, 102);
    this.richTextBox4.TabIndex = 11;
    this.richTextBox4.Text = "richTextBox4";
    // 
    // Form1
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(292, 273);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
      this.richTextBox4,
      this.splitter3,
      this.richTextBox3,
      this.splitter2,
      this.richTextBox2,
      this.splitter1,
      this.richTextBox1});
    this.Name = "Form1";
    this.Text = "Form1";
    this.ResumeLayout(false); }四个richTextBox分割也是蛮轻松的,可惜不知道能否
    从某个位置开始dock,我试过去改.Location属性,可惜
    每次运行又按照原来的位置重排了。
      

  3.   

    splitter需要和 dock 属性结合起来使用,主要是看哪个挤得赢哪个tommyjian(海里的猫) 的方法是可行的不过要把“...然后加一个richtextbox2,将它的dock属性设为client...”改为fill。我那天拖了两个小时,那个WinForm总算听话了,西西!
      

  4.   

    谢谢各位大虾,问题已经解决了。^_^
        不过,请容许我在这里做个小结。
        首先,告诉“一第数倒”,改变大小不需要自己写事件处理哦,splitter已经有拖放的功能了。不过,如果你是说改变整个form的大小,另当别论。
        我发现,在form中先放入的控件的dock有较高的优先级。比如你先放入一个richtextbox,设成dock top,那整个top就他占了,别的控件再设dock top,也只能dock在它下面。下面说说我的form的设计。
        我的要求是整个form分成左右两部分,右边是一个richtextbox,而左边
    分成上下两部分,分别放一个richtextbox(呵呵,一个编译器模型)。好,
    我先在form里放一个rtb(RichTextBox),设成dock right,然后放一个splitter,设dock right,这样splitter就粘在rtb左边了。再放一个rtb2,设dock bottom(为何不先设dock top?自己试试看),再放一个splitter2,设dock bottom,就粘在rtb2上了。最后放一个rtb3,设dock fill,好,完成!运行后你会发现,两个splitter可以拖放,同时改变上下或两边区域的大小,很方便的哦。
        整个过程只是在vs.net里拖放控件,改改属性,一行代码都没写哦!
        最后,再次感谢各位。嗯,怎么结贴来着……