всем привет. у меня тут возникла проблема с динамически созданными панелями, когда я меняю размер формы своей, N-ое кол-во панелей меняют свою ширину тоже, и при необходимости (зависит от текста внутри панели), меняют свою высоту.. ну и потом когда ширина формы делается больше - панели по высоте\ширине становятся обратно нормальными... НО когда высота у панелей изменяется - нужно чтоб расстояние оставалось неизменным... пробовал разные методы уже, но все получается криво... подскажите плиз. Code: public void checkResize(string msg_out, object panel_sender, object text_msg_sender, int panHei, int numbs) { Panel pan_item = (Panel)panel_sender; Label lab_item = (Label)text_msg_sender; char[] msg_arr = msg_out.ToCharArray(); int panWidthRaznost = 308 - pan_item.Width; int panWidth = pan_item.Width; if (int.Parse(pan_item.Name) != numbs - 1) //если это 1ая панель - не делать изменения локации для нее { if (panWidth < buff) //если панель сужается - делать расстояние между панелями больше { this.Controls.OfType<Panel>().OrderBy(x => Convert.ToInt32(x.Tag)).ToList().ForEach(pan => setPanelLocation(pan)); //попытка №1 /* if (panWidthRaznost % 15 == 0) //попытка №2 { for (int i = int.Parse(pan_item.Name); i >= 0; i--) { panel1.Controls[i.ToString()].Location = new Point(panel1.Controls[i.ToString()].Location.X, panel1.Controls[i.ToString()].Location.Y + 1); // panel1.Controls[i.ToString()].Location = new Point(panel1.Controls[i.ToString()].Location.X, panel1.Controls[i.ToString()].Location.Y + (pan_item.Lines)); } } */ } if (panWidth > buff) //если панель растягивается - делать расстояние между панелями меньше { this.Controls.OfType<Panel>().OrderBy(x => Convert.ToInt32(x.Tag)).ToList().ForEach(pan => setPanelLocation(pan)); //попытка №1 /*if (panWidthRaznost % 15 == 0) //попытка №2 { for (int i = int.Parse(pan_item.Name); i >= 0; i--) { panel1.Controls[i.ToString()].Location = new Point(panel1.Controls[i.ToString()].Location.X, panel1.Controls[i.ToString()].Location.Y - 1); } }*/ } buffCountPan++; if (buffCountPan == panel1.Controls.Count - 1) { buff = panWidth; buffCountPan = 0; } } if (msg_arr.Length > 26) //если кол-во символов в сообщении меньше - не менять размеры панели и лейбла { int panWidthRaznostForHeight = (308 - pan_item.Width) / 4; //разность на сколько уменьшили панель pan_item.Height = panHei + panWidthRaznostForHeight; //разность на сколько нужно увеличить панель lab_item.MaximumSize = new System.Drawing.Size(300 - panWidthRaznost, 100); //изменение ширины лейбла сообщения lab_item.MinimumSize = new System.Drawing.Size(300 - panWidthRaznost, 14); //изменение ширины лейбла сообщения } } private void setPanelLocation(Panel pnl) { int iPanelOrder = Convert.ToInt32(pnl.Tag); if (iPanelOrder == 0) { pnl.Top = MinimumStartLocation; } else { pnl.Top = this.Controls.OfType<Panel>().ToList().Find(pan => Convert.ToInt32(pan.Tag) == iPanelOrder - 1).Bottom + DistanceBetweenPanel; } } так-же выложу для большего понятия кусок проекта... http://www.sendspace.com/file/9og7co
Проблема решена, т.к. если было свойство Dock, то оно все в кучу сворачивало, но свойство что панели не наезжали друг на друга сохранялось. Поэтому с помощью вспомогательной панели, которая на 10рх больше на которую наложились остальные панели - все получилось.