Поддерживает ли Visual Studio WinForms элементы управления без окон?

Каждый элемент управления в панели инструментов Visual Studio WinForms должен происходить из Control?

Поддерживает ли Visual Studio элементы управления без окон?


Каждый элемент управления, который вы добавляете на панель инструментов в Visual Studio:

должен1 спуститься с Control, который является оберткой вокруг оконного элемента управления.

К сожалению, оконные элементы управления очень "тяжелые"; их большое количество, особенно вложенное, приводит к снижению производительности в WinForms.

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

  • изображение (безоконный вариант PictureBox)
  • заголовок (безоконный вариант Label)
  • метка субтитра (безоконный вариант Label)
  • граница (безоконный вариант Panel)

Они полезны для уменьшения проблем производительности в WinForms, но они застряли внутри кода.

Я хотел бы сделать то, что позволяют другие среды разработки, это версия Control это не создает окно Windows. Мне бы хотелось, чтобы в наборе инструментов Visual Studio можно было принимать ** оконные * элементы управления.

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

Поддерживает ли Visual Studio WinForms элементы управления без окон?

1 или нет

1 ответ

Решение

И да и нет.

Сначала ознакомьтесь с этой статьей от достопочтенного Рэймонда Чена: http://blogs.msdn.com/b/oldnewthing/archive/2005/02/11/371042.aspx

Да. Вы можете создавать "элементы управления", которые не являются производными от Control, Я создал несколько безоконных элементов управления в своем приложении, которые изначально поддерживают клики, слои и т. Д., Я рисую их в внеэкранный буфер, а затем рисую их непосредственно на каком-то родительском элементе Form или же Control (такой как PictureBox). Это легко сделать, но не просто, так как вам нужно будет самостоятельно все управлять в коде.

Нет. Любые безоконные элементы управления не будут поддерживаться в конструкторе Windows Forms ни для одного из Controlразработчики элементов управления (например, размещение их на панели или форме), поэтому у вас не будет перетаскивания дизайна формы.

Как указал Ганс, ToolStrip а также MenuStrip (безоконный контроль) являются такими примерами. Обратите внимание, что при создании нового MenuStrip на Form, MenuStrip помещается в лоток для компонентов под формой. MenuStrip с ним связан пользовательский набор классов Designer для поддержки пользовательской рисования и функциональности "Тип здесь", а также диалоговые окна для добавления и удаления пунктов меню. Обратите внимание, что "дочерние" элементы управления без окон, такие как ToolStripButton, недоступны в панели инструментов для поддержки перетаскивания непосредственно на форму - об этом знает только пользовательский дизайнер. Пользовательский дизайнер для MenuStrip также поддерживает выбор дочерних безоконных элементов управления, чтобы можно было редактировать свойства каждого элемента в окне "Свойства".

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

  1. Создайте класс, производный от Component это будет использоваться для управления вашими элементами управления без окон. Например, вы можете назвать этот класс WindowlessWidgetManager, После компиляции этот элемент управления появится в вашем наборе инструментов. WindowlessWidgetManager может содержать коллекцию ваших безоконных элементов управления и обеспечивать рисование и другую поддержку пользовательского интерфейса для холста, такого как Form или же PictureBox,
  2. Создайте дизайнерский класс, производный от ComponentDesigner это поддерживает такие вещи, как добавление и удаление пользовательских элементов управления во время разработки. Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/system.componentmodel.design.componentdesigner(v=VS.90).aspx

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

Другие вопросы по тегам