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

Просто сделай это. Это удалит все файлы внутри каталога, а также из подкаталогов. Без вреда для любой папки / каталога. Хорошо работает на Ubuntu без каких-либо ошибок.

import os
mypath = "my_folder" #Enter your path here
for root, dirs, files in os.walk(mypath):
    for file in files:
        os.remove(os.path.join(root, file))
21
задан Uwe Keim 29 August 2013 в 11:16
поделиться

3 ответа

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

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

16
ответ дан 29 November 2019 в 21:32
поделиться

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

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

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

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

1
ответ дан 29 November 2019 в 21:32
поделиться

In winforms there are some tricks to allow a control having its background correctly painted when using transparency. You can add this code to the OnPaint or OnPaintBackground to get the controls you have in the background being painted:

if (this.Parent != null)
{
 GraphicsContainer cstate = pevent.Graphics.BeginContainer();
 pevent.Graphics.TranslateTransform(-this.Left, -this.Top);
 Rectangle clip = pevent.ClipRectangle;
 clip.Offset(this.Left, this.Top);
 PaintEventArgs pe = new PaintEventArgs(pevent.Graphics, clip);

 //paint the container's bg
 InvokePaintBackground(this.Parent, pe);
 //paints the container fg
 InvokePaint(this.Parent, pe);
 //restores graphics to its original state
 pevent.Graphics.EndContainer(cstate);
}
else
  base.OnPaintBackground(pevent); // or base.OnPaint(pevent);...
10
ответ дан 29 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: