欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# Winform 实现控件自适应父容器大小的示例代码

程序员文章站 2022-06-25 09:27:34
在日常开发中经常遇到控件不能随着父容器大小的改变而且自动改变控件的所在位置和大小。以下是实现的代码 /// /// 根据父容器实现控件自适应大小位置 /// <...

在日常开发中经常遇到控件不能随着父容器大小的改变而且自动改变控件的所在位置和大小。以下是实现的代码

 /// <summary>
  /// 根据父容器实现控件自适应大小位置
  /// </summary>
  /// <param name="control">所需自适应大小位置的控件</param>
  private void changelocationsizebyparent (control control)
  {
    //记录父容器大小,来判断改变控件大小位置是因为父容器的改变还是通过设置控件大小位置去改变
    size parentoldsize = control.parent.size;

    pointf locationpf = new pointf();
    locationpf.x = (float)control.location.x / (float)control.parent.width;
    locationpf.y = (float)control.location.y / (float)control.parent.height;
    
    pointf sizepf = new pointf();
    sizepf.x = (float)control.width / (float)control.parent.width;
    sizepf.y = (float)control.height / (float)control.parent.height;

    control.locationchanged += delegate (object o, eventargs e) {

      if (control.parent != null&&parentoldsize.equals(control.parent.size))
      {
        locationpf.x = (float)control.location.x / (float)control.parent.width;
        locationpf.y = (float)control.location.y / (float)control.parent.height;
        
      }
    };
    control.sizechanged += delegate (object o, eventargs e) {

      if (control.parent != null && parentoldsize.equals(control.parent.size))
      {
        sizepf.x = (float)control.width / (float)control.parent.width;
        sizepf.y = (float)control.height / (float)control.parent.height;
        
      }
    };
    control.parentchanged += delegate (object o, eventargs e) {
      if (control.parent == null)
      {
        return;
      }
      locationpf.x = (float)control.location.x / (float)control.parent.width;
      locationpf.y = (float)control.location.y / (float)control.parent.height;
      sizepf.x = (float)control.width / (float)control.parent.width;
      sizepf.y = (float)control.height / (float)control.parent.height;
    };
    control.parent.sizechanged += delegate (object po, eventargs pe) {

      control pcontrol = (control)po;
      int x = (int)(pcontrol.width * locationpf.x);
      int y = (int)(pcontrol.height * locationpf.y);
      control.location = new point(x, y);
      int width = (int)(pcontrol.width * sizepf.x);
      int hetght = (int)(pcontrol.height * sizepf.y);
      control.size = new size(width, hetght);
      control.refresh();
      parentoldsize = pcontrol.size;
    };
  }

到此这篇关于c# winform 实现控件自适应父容器大小的示例代码的文章就介绍到这了,更多相关c# winform 控件自适应父容器大小内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: C# Winform 容器