shayke23 Ответов: 2

Проблема пользовательских элементов управления с помощью док-станции.Заполнить


всем привет,
я столкнулся с проблемой, пытаясь заполнить UserControl
внутри панели.

я создал несколько UserControlмоя проблема заключается в том, что при попытке заполнить их в панели некоторые из них изменяются, как и ожидалось, а некоторые не реагируют и остаются в том же размере.


???

другое дело-это органы управления, которые нормально реагируют. PictrueBox тип.
остальные-это Panels содержит множество элементов управления.

спасибо!

2 Ответов

Рейтинг:
2

Christian Graus

Что вы настроили эти панели, когда они состыкованы ? Я бы предположил, что они делают то, что им говорят.


Рейтинг:
0

Armando de la Torre

Привет,
Это старый пост, но в любом случае я уже сталкивался с подобными проблемами.

Набор моих элементов управления не был закреплен должным образом ( он был помещен правильно, но как только я изменил размер формы, элементы управления остались того же размера ( я добавлял элементы управления во время выполнения). Итак, мне действительно пришлось закодировать пару методов для изменения размера всей иерархии элементов управления.

private static void ResizeChildsInt(Control c,bool recursive) {
      Rectangle r = c.DisplayRectangle;

      foreach (Control item in c.Controls) {
        if (item.Dock == DockStyle.Top) {
          item.Top = r.Top;
          item.Left = r.Left;
          item.Width = r.Width;
          if (item.Height > r.Height) {
            item.Height = r.Height;
          }
          r = new Rectangle(r.X, r.Y + item.Height, r.Width, r.Height - item.Height);
        } else if (item.Dock == DockStyle.Bottom) {
          int bottom = r.Bottom - item.Height;
          if (item.Height > r.Height) {
            item.Height = r.Height;
          }          
          item.Top = item.Height - r.Bottom;
          item.Left = r.Left;
          item.Width = r.Width;
          r = new Rectangle(r.X, r.Y, r.Width, r.Height - item.Height);
        } else if (item.Dock == DockStyle.Left) {
          int width = item.Width;
          if (width > r.Width) {
            width = r.Width;
          }
          item.Top = r.Top;
          item.Left = r.Left;
          item.Height = r.Height;
          item.Width = width;
          r = new Rectangle(r.X + item.Width, r.Y, r.Width - item.Width, r.Height);
        } else if (item.Dock == DockStyle.Right) {
          int width = item.Width;
          if (width > r.Width) {
            width = r.Width;
          }

          item.Top = r.Top;
          item.Left = r.Right - item.Width;
          item.Height = r.Height;
          item.Width = width;
          r = new Rectangle(r.X, r.Y, r.Width - item.Width, r.Height);
        }
      }
      //Fill
      foreach (Control item in c.Controls) {
        if (item.Dock == DockStyle.Fill) {
          item.Top = r.Top;
          item.Left = r.Left;
          item.Width = r.Width;
          item.Height = r.Height;
        }
      }

      //Recursive
      if (recursive) {
        foreach (Control item in c.Controls) {                
          if (item is UserControl == false) {
            ResizeChildsInt(item, recursive);
          }
        }
      }
    }

    public static void ResizeChilds(Control c) {
      c.SuspendLayout();
      ResizeChildsInt(c, true);
      c.ResumeLayout();
    }

Просто вызывайте статический метод ResizeChilds каждый раз, когда изменяется размер элемента управления.


[no name]

Боже правый, пусть он умрет!
Начните свой собственный поток.
Во-первых, операция, скорее всего, двинулась дальше. За двоих нельзя "принять" и ответить. Для троих это почти 2 года!

Armando de la Torre

Я действительно нашел эту статью, потому что у меня был тот же вопрос. Поэтому я сделал закладку. Как только я нашел ответ, я отправил его. Может быть, это кому-то поможет в будущем.

phil.o

Я бы назвал это "копанием в теме". :)