如何让FlowLayoutPanel容器里面的【子控件】随着容器(宽度)发送改变而发送改变?

我不知道有没有更好的方法去实现,或者设置某些属性就能实现,(写的不好,却别吐我,注意素质),但是对于我来说目前还没发现其他的好方法!


FlowLayoutPanel容器(宽度【仅限宽度】)变大、缩小,里面的子控件也随着变大、缩小

以前要实现布局容器里面所有子控件(宽度)发送改变,确实很头疼,又不能全部设置(Anchor属性Right、Left),看清楚是全部,只要一设置,控件就没有啦,缩小到Size(0,0)啦,很是头疼。除非些代码控制,循环去修改子控件宽度,这个子控件少还可以,控件多啦就麻烦。。。

这里要写的方法,也是要设置子控件的Anchor属性,写少量代码的!

第一步:新建一个Form,拖一个FlowLayoutPanel控件

第二步:设置FlowLayoutPanel属性,Dock = Fill,FlowDirection = TopDown 或者 BottomUp (必须是这2个),WrapContents = true,AutoScroll = true。

第三步:拖子控件,这里我们就用TextBox代替把,拖把。。。使劲的拖把,我测试的时候拖了大概150个。

第四步:设置子控件的Anchor属性,注意:第一个控件不需要设置Anchor属性(默认Top、Left),其他所有子控件Anchor属性设置为Left和Right。

                千万注意第一个控件不能设置Anchor属性,保持默认Top和Left即可。。。。。。

第五步:您可以在设计界面上修改第一个子控件的(拖拉修改)宽度啦,看有什么变化,修改第一个子控件的宽度,下面所有子控件是不是也跟着改变呢?有木有?

第六步:如果第5步成功,那就可以写点代码啦!用FlowLayoutPanel的SizeChanged事件或者Resize事件都可以!                

  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
      this.flowLayoutPanel1.Resize += new System.EventHandler(this.flowLayoutPanel1_Resize);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      oldwidth = this.Width;
    }

    int oldwidth = 0; //判断宽度是否发送过改变
    private void flowLayoutPanel1_Resize(object sender, EventArgs e)
    {
      if (oldwidth != this.flowLayoutPanel1.Width)
      {
        //textBox1为第一个控件
        //代码只需要修改第一个控件的宽度即可
        textBox1.Size = new Size(this.flowLayoutPanel1.Width - 25, this.textBox1.Height);
        oldwidth = this.Width;
      }
    }
  }

第7步: 调试运行...........修改窗体宽度时,里面的所有子控件也发生修改,而且没有闪烁哟....



你可能感兴趣的:(最近新发现)