Можно ли преобразовать элементы управления в компонент или компонент для управления в winforms? - PullRequest
1 голос
/ 06 января 2010

Возможно ли преобразовать элементы управления в Компонент или компонент для управления в winforms? И возможно ли сделать прозрачной кнопку в winforms?

Ответы [ 2 ]

7 голосов
/ 06 января 2010

Существует огромная разница между компонентом и управлением. Компонент - это очень простой класс, он имеет 3 члена для поддержки времени разработки, 6 членов для поддержки времени выполнения, и все. Вы можете оставить один на форме, так что его свойства могут быть изменены. Все полезное, что оно делает во время выполнения, должно быть реализовано самим компонентом, без помощи Windows Forms.

Элемент управления расширяет Компонент, добавляя элементы, которые позволяют ему иметь четко определенное поведение во время выполнения, в частности, путем переноса собственного окна Windows. Вы можете увидеть это и щелкнуть по нему. Большая работа, которая требует сотен участников, хотя большинство из них не видны в конструкторе.

Превращение элемента управления в компонент, но сохраняющего характеристики элемента управления, возможно. ToolStripItem делает это. Тем не менее, он требует огромного количества кода, так как вы должны заменить все функции, которые предоставляет окно Windows. Это трудно, даже для Microsoft классы ToolStripItem имеют много ошибок. Единственное преимущество, которое вы получаете от этого, состоит в том, что вы можете избежать выделения дескриптора окна. Что иногда может быть привлекательным, окна являются дорогими объектами и могут замедлить работу вашего кода. И вы застряли в том, как работает окно, например, с плохой поддержкой прозрачности.

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

Приступая к делу, это уже сделано. Это точная модель для WPF. Приложение WPF (обычно) имеет только один собственный дескриптор окна. Все остальное рисуется внутри него механизмом рендеринга WPF. Поэтому нет проблем с поддержкой эффектов прозрачности. Любые другие навороты, такие как вращающиеся элементы управления, которые вы не можете получить в собственном окне. Или браузер.

Если вы хотите придерживаться WF, подробно объясните, какой эффект прозрачности вам нужен. Есть много способов получить один, это зависит только от того, что вы пытаетесь сделать. Кстати, хороший вопрос в StackOverflow примерно такой же, как и хороший ответ.

0 голосов
/ 06 января 2010

Компонент можно разместить в любом объекте, который реализует интерфейс IContainer.

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