Как сделать BackGround пользовательского элемента управления прозрачным? - PullRequest
1 голос
/ 31 мая 2011

Я хочу, чтобы BackGround моего UserControl выглядело так, будто его там нет. Я пытался сделать это так:

if ((Parent != null) && (Parent.BackgroundImage != null))
{
    Bitmap backGroundImage = new Bitmap(Width, Height);
    Graphics.FromImage(backGroundImage).DrawImage(owner.BackgroundImage, 0, 0, new Rectangle(Location.X, Location.Y, Width, Height), GraphicsUnit.Pixel);
     this.BackgroundImage = (Image)backGroundImage;
}

и это работает, но мне также приходится вычислять BackGroundImage формы, которая является родительским элементом UserControl, каждый раз, когда изменяется его размер, и устанавливать BackGroundImageLayout формы в значение none. Мой UserControl мог бы взять BackGroundImage Parent и растягивать его каждый раз, когда ему нужно перерисовать, а затем просто взять его часть и установить его в качестве BackGroundImage, но Form рисует растянутый фон за пределами видимого прямоугольника. Тогда я вижу разницу, она не подходит.

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

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

Ответы [ 3 ]

4 голосов
/ 31 мая 2011

Сделать пользовательский контроль задним цветом прозрачным this.BackColor = Color.Transparent;

1 голос
/ 31 мая 2011

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

 parent.BackColor = Color.Red;
 parent.TransparencyKey = parent.BackColor;
1 голос
/ 31 мая 2011

Вы можете использовать, someUserControl.BackColor = Color.FromKnownColor (KnownColor.Transparent);и невидимый BackColor.

...