如何让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步: 调试运行...........修改窗体宽度时,里面的所有子控件也发生修改,而且没有闪烁哟....



FlowLayoutPanel 一些应用程序需要一个布局可随窗体大小的调整或其中内容大小的改变自动进行适当排列的窗体。在需要动态布局并且不希望在代码中显式处理 Layout 事件时,可考虑使用布局面板。 FlowLayoutPanel是.NET Framework的新增控件。顾名思义,面板可以采用Web窗体的方式给Windows窗体布局。FlowLayoutPanel是一个容器,允许以垂直或水平的方式放置包含的控件。除了放置控件之外,还可以剪辑控件。放置的方向使用FlowDirection属性和FlowDirection枚举来设置。WrapContents属性确定在重新设置窗体的大小时,控件是放在下一行、下一列,还是剪辑控件FlowLayoutPanel 按特定的流方向排列其内容:水平或垂直。其内容可从一行换到下一行,或者从一列换到下一列。另一种情况是不换行,而是将其内容截掉。 相信大家在做WinForm项目的时候,要对大量的控件进行排序(位置摆放),这个容器肯定最受欢迎,但很遗憾的是,此容器本身虽支持Dock和Anchor属性,但不支持放入此容器内的控件的Dock和Anchor属性(自动调整宽度),也就说,但窗体伸缩,FlowLayoutPanel容器自身可以缩放,但是里面的控件就没那么幸运了,不支持自动缩放,这样就必须写方法来触发新的事件来调整控件的大小,这样就会导致窗体的闪烁(重绘)。 借助ManagedSpy工具,我们可以看到此容器里面的器件的结构,我们可以在Form1里面添加一个事件SizeChanged 对容器里面每个器件重新给它大小 就行了。 附件:FlowLayoutPanel的Demo
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值