Дизайнер портит расположение и размер дочернего контейнера Custom UserControl, для которого включен дизайн
Когда я помещаю этот элемент управления в форму, меняю его размер и местоположение, сохраняю его и закрываю форму. После его открытия местоположение и размер не совпадают, но в ".Designer.cs" это именно то, как я его установил. Я не могу найти решение этой проблемы, даже кто-то не упоминает об этом.
Это простой пример пользовательского элемента управления, который я использую:
[Designer(typeof(myControlDesigner1))]
public partial class UserControl1 : UserControl
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[TypeConverter(typeof(Panel))]
[MergableProperty(false)]
public System.Windows.Forms.Panel Panel
{
get
{
return pnlWorkingArea;
}
set
{
pnlWorkingArea = value;
}
}
public UserControl1()
{
InitializeComponent();
}
}
public class myControlDesigner1 : ControlDesigner
{
public override void Initialize(IComponent component)
{
base.Initialize(component);
UserControl1 bc = component as UserControl1;
EnableDesignMode(bc.Panel, "MyPanel");
}
}
1 ответ
Да, я могу воспроизвести вашу проблему сейчас, потому что панель находится внутри usercontrol, они добавляются в форму в целом, что означает, что расположение панели относительно usercontrol, поэтому, если вы установите местоположение панели (x, y), то при повторном открытии формы фактическое расположение панели будет (usercontrol.location.X+x, usercontrol.location.Y+y).
Вы можете обнаружить, что нет никаких проблем, если вы установили расположение пользовательского элемента управления в форме (0, 0), пожалуйста, попробуйте.
Если вы не хотите указывать расположение пользовательского элемента управления (0, 0), в качестве альтернативного решения вы можете добавить следующий код в событие Form_Load, чтобы оно было там, где вы его установили при запуске формы:
private void Form1_Load(object sender, EventArgs e)
{
this.userControl11.Panel.Location = new Point(userControl11.Panel.Location.X - userControl11.Location.X, userControl11.Panel.Location.Y - userControl11.Location.Y);
}