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