Создание пользовательского элемента управления, который состоит из двух частей - PullRequest
0 голосов
/ 08 мая 2019

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

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

<Designer("System.Windows.Forms.Design.ParentControlDesigner,System.Design", GetType(IDesigner))> _

Я планирую иметь несколько «версий» этого элемента управления, которые будут вести себя по-разному. Например;

  • Один заполнен только динамически созданными флажками, которые будут содержать текущий список того, что проверено.

  • Другой, который содержит вручную или динамически добавленные переключатели.

  • Другой, разработанный вручную, и т. Д.

Таким образом, каждая из этих версий будет новым элементом управления, содержащим оригинал.

Однако я столкнулся с проблемой. Когда я добавляю элементы управления к этому пользовательскому элементу управления, например tablelayoutplanel, и устанавливаю их в Dock.Fill. Во время разработки они выглядят хорошо, когда добавленный элемент управления находится ниже метки, но затем, когда приложение запускает элемент управления внутри заливки, чтобы перекрыть метку, и когда выполнение останавливается, изменение также отражается в версии проекта.

Поэтому я пытаюсь выяснить, возможно ли создать пользовательский элемент управления, состоящий из нескольких отдельных «частей»;

  • Метка, которая будет недоступна для дизайнера.

  • Панель контейнера ниже, которая ... содержит все вещи и будет доступна во время разработки.

Запрет на то, что есть способ переопределить Dock.Fill, чтобы его верхняя позиция начиналась с X, так как я знаю, насколько высок мой ярлык? Я бы предпочел не делать код, который изменяет размеры всех вещей, так как у меня нет способа узнать, сколько вещей может или не может оказаться в ручном создании в будущем.

Я пробовал искать примеры складных панелей, но пока те, которые я обнаружил, либо вызывают ошибки конструктора, либо кода, когда я переносу их из более старых версий VS, в которые они встроены, или они находятся в C #.

Плюс, они действительно не выглядят так, как я пытаюсь достичь. Что является

Collapsible Panel

Если что-то из этого не может быть сделано, пожалуйста, дайте мне знать, чтобы я мог попытаться найти другой подход к тому, чего я пытаюсь достичь, что в основном составляет; Вещи, которые начинаются с размера метки и открываются / закрываются, показывая контейнер dock.fill, который при открытии имеет элементы управления внутри и не переступает через метку.

Спасибо.

Редактировать: Добавлено быстрое видео, чтобы показать поведение.

1 Ответ

0 голосов
/ 09 мая 2019

Так что я смог достичь желаемого эффекта, но мне пришлось пойти по совершенно иному пути, который меня не очень устраивал.

Теперь у меня есть два элемента управления в составе моей слайд-панелиcontrol.

  • SlidePanelLabel

  • SlidePanelPanel

SlideLabelLabel находится в верхней части родительского элемента.выпадающий и если щелкнуть, будет увеличивать и уменьшать родительский элемент на основе parent.maximumsize.height, фактически не затрагивая себя.

SlidePanelPanel - это просто пустой элемент управления панели с некоторыми переопределениями, которые имеют дело с несколькими утомительными ситуациями с полосами прокрутки.


С одной стороны это означает, что я могу использовать «Метку», чтобы увеличивать и уменьшать другие объекты, если я хочу, и я мог бы расширить ее, чтобы придать ей некоторую функциональность направления.

С другой стороны, я действительно хотел выяснить, как создать вещь, которая может «порождать» объект, который имеет функциональность дизайнера в области вокруг / внутри себя, как Tab ConТроль.Где область вкладок будет блокировать вас от добавления элементов управления к нему, но страницы не будут.

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

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

Я действительно хочу поблагодарить Джими за попытку помочь и за полезную информацию о доке и якорной стоянке и тому подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...