2013-05-30 2 views
3

Контекст:управления пользователя Anchor вопрос о собственности

Я создал User Control. По какой-то причине я хочу использовать этот элемент управления разного размера. Чтобы сохранить начальный «шаблон» моего User Control при повторной калибровке, я использую свойство Anchor на моем другом элементе внутри элемента управления.

Так что, когда я создаю свой контроль на время разработки, можно мне рук повторного размера контроля и сохранить оригинал «шаблон» его.

Когда элемент управления создан, он выглядит следующим образом:

Initial

И после повторного размера:

Re-Sized

Как вы можете видеть, свойство Anchor работы Что ж.

  • Наклейка и изображение остаются посередине.
  • "?" Оставайтесь в левом углу.

Проблема:

Проблема у меня есть, когда элемент управления перезагружается, созданные с помощью другого размера, как исходного, все элементы внутри возвращаются в исходное положение:

Problem

Я не знаю, является ли это лучшим способом сделать то, что я пытаюсь достичь. Имейте в виду, что я добавляю и повторно настраиваю элемент управления во время разработки.

спасибо.

EDIT:

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

EDIT 2:

Хорошо я нашел решение, я просто перешел весь элемент User control внутри Panel. По какой-то причине я не могу объяснить, он отлично работает. Контроль находится в том же месте.

+0

Вы можете использовать ResizeEnd событие, чтобы применить те же свойства, которые они использовали, чтобы иметь в ResizeBegin. Когда вы говорите, что перезагрузили, значит, что элемент управления получает полный новый экземпляр? Если это так, он всегда должен вызывать InitializeComponent, который применяет свойства, определенные в конструкторе. –

+0

Im не совсем уверен, что попробовать, потому что моя проблема, похоже, является причиной в дизайнере. Пример: я добавляю свой контроль в своем дизайнере, меняю его размер, я запускаю решение. Все работает хорошо. Но когда я перехожу к коду страницы, а затем возвращаюсь к дизайнеру, элемент внутри элемента управления возвращается в исходное положение ... –

+1

Это слишком расплывчато. Вам нужно будет объяснить, как именно этот элемент управления получил «перезагрузку», но больше не использовал его оригинальный размер дизайна. И почему обычный вызов PerformLayout(), который выдается после загрузки элементов управления, больше не выполняется. –

ответ

2

Решение ta добавляет Panel к User Control и прикрепляет его к «Заполнить», а затем размещает элемент внутри этой панели. По какой-то причине, которую я не могу объяснить, дизайнер сохраняет расположение элементов управления размерами.

+0

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

2

Якорь, стыковка и автоматическая калибровка UserControl кажутся ужасно запутанными. Я нашел UserControl does not auto resize with the Form, который предполагает, что вы установили свойство AutoSize в False, что я и сделал, и он по-прежнему не исправил мою проблему. Но когда я попробовал ваше решение, я также заметил, что есть две копий AutoSize! Я установил AutoSize в конструкторе UserControl на False, но конструктор форм, в который был добавлен экземпляр UserControl, также содержал AutoSize на экземпляре, и у него было значение (это было True). Когда я установил это также на False, тогда все сработало (с панелью на месте). Затем я удалил панель, которую вы предложили, и все еще работало. Поэтому я думаю, что трюк заключается в том, чтобы убедиться, что вы проверяете все свойства UserControl в конструкторе UserControl и в конструкторе форм, в котором используется элемент управления. Тогда вам не нужна панель.

0

Установите для свойства Localizable родительской формы в конструкторе VS значение false. Это решает проблему во время разработки. (Сохранить, закрыть и снова открыть форму после переключения свойства)

Если вам нужно локализованное приложение, переключите свойство Localizable в true после завершения работы с макетом и не заботитесь о проводном представлении в конструкторе VS. Во время выполнения это показано правильно.

Испытано в VS2013

1

У меня была аналогичная проблема в VS2015 проекта, и к сожалению - ни один из ваших ответов не помогло. Было найдено чистое и рабочее решение here, in Jignesh Thakker answer. Для более быстрой навигации здесь, как это было сделано в моем проекте (C++/CLI, а не C#, но идея та же):

System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { 
/* some code */ 

myUserControl = gcnew MyUserControl(); 
myUserControl->Dock = DockStyle::Fill; 

tabPage1->Dock = DockStyle::Fill; 
tabPage1->Controls->Add(myUserControl); 

/* some code */ 

} 
Смежные вопросы