Рисование прозрачной кнопки
===========================

 Я пытаюсь создать прозрачную кнопку в C # (.NET 3.5 SP1) для использования в моем приложении WinForms. Я перепробовал все, чтобы кнопка была прозрачной (она должна показывать градиентный фон под кнопкой), но она просто не работает.

 Вот код, который я использую:

 Проблема в том, что кнопка, кажется, захватывает произвольную память пользовательского интерфейса откуда-то и заполняет себя некоторым буфером из пользовательского интерфейса Visual Studio (в режиме разработки). Во время выполнения он захватывает некоторый нулевой буфер и полностью черный.

 Моя главная цель - нарисовать изображение на невидимой кнопке вместо прямоугольника. Однако концепция должна оставаться прежней. Когда пользователь наводит курсор на кнопку, то рисуется форма типа кнопки.

Любые идеи

 **EDIT: Спасибо всем, у меня сработало следующее:**

rms, однако, может имитировать прозрачность, используя предоставленный вами стиль элемента управления - SupportsTransparentBackColor, но в этом случае все это «прозрачно». контроль делает, это позволяет рисовать родительский фон.

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



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

И звонок как:



 что ButtonBase поддерживает прозрачность ... Вы это проверили?

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

Когда вы хотите заблокировать элемент управления, рисующий его фон, вы должны переопределить OnPaintBackground вместо OnPaint и не вызывать базовый класс.

Заполнение прямоугольника с помощью кистей. Прозрачный - это забавно - вы рисуете невидимым цветом поверх того, что там есть. Или, говоря иначе: ничего не происходит!



 позволяющие элементу управления правильно окрашивать фон при использовании прозрачности. Вы можете добавить этот код в OnPaint или OnPaintBackground, чтобы получить элементы управления, которые вы имеете в окрашиваемом фоне: