2013-11-11 2 views
12

Я делаю приложение в C# .NET. У меня есть 8 ящиков с картинками. Я использовал PNG-изображения с прозрачным фоном, но в моей форме он не прозрачен, когда он появляется над другим изображением.Как сделать прозрачный прозрачный?

Я использую Visual Studio 2012. Это скриншот моего вида:

Screenshot of Form

+1

Взгляните на http://stackoverflow.com/questions/5522337/c-sharp-picturebox-transparent-background-doesnt-seem-to-work – Binke

+1

возможный дубликат [Сделать перекрытие прозрачного изображения в C# .net] (http://stackoverflow.com/questions/4623165/make-overlapping-picturebox-transparent-in-c-net) – mbeckish

+0

Существует решение, использующее обычный элемент управления, например Panel, ... Мы можем сами нарисовать изображение, однако это сложно для «PictureBox». Даже решение для другого элемента управления не очень хорошо, если вы хотите переместить объект во время выполнения (из-за мерцания). –

ответ

-3

вы можете установить PictureBoxBackColor proprty в Transparent

+1

Да, но это работает только для фона формы. Я сделал это, но, как вы можете видеть на скриншоте, когда наложения изображений перекрываются, он не работает. –

0

Попробуйте использовать ImageList

ImageList imgList = new ImageList; 

imgList.TransparentColor = Color.White; 

Загрузите это изображение:

picturebox.Image = imgList.Images[img_index]; 
+0

Его не работает чувак. –

35

Один из способов сделать это, изменив родительский элемент перекрывающего окна изображения на PictureBox, над которым он притирается. Поскольку конструктор Visual Studio не позволяет добавить PictureBox к PictureBox, это должно быть сделано в коде (Form1.cs) и в функции Intializing:

public Form1() 
{ 
    InitializeComponent(); 
    pictureBox7.Controls.Add(pictureBox8); 
    pictureBox8.Location = new Point(0, 0); 
    pictureBox8.BackColor = Color.Transparent; 
} 

Просто измените окно изображения имена, что вам нужно. Это должно вернуть:

enter image description here

+0

Я использую две картины разных размеров. Когда я устанавливаю одно изображение в качестве родителя другого, отображается только перекрывающаяся часть, и все, что находится за пределами границ родителя, отключается. Любое решение? – valsidalv

+1

@valsidalv Извините, я немного не был в Visual Studio, но из того, что я помню, не было бы просто увеличить родительское изображение (без растяжения и т. Д.), Так что он также отображает всех детей? – SuperPrograman

+0

Я тоже так думал ... Я закончил этот учебник и создал пользовательский элемент управления, содержащий мои изображения http://www.codeproject.com/Articles/25048/How-to-Use-Transparent-Images-and-Labels- in-Window – valsidalv

0

У меня была аналогичная проблема, как это. Вы не можете сделать Transparent picturebox легко, например изображение, показанное в верхней части этой страницы, потому что объекты .NET Framework и VS .NET созданы INHERITANCE! (Используйте родительское свойство).

Я решил эту проблему путем RectangleShape и кода ниже я удалил фон, , если разница между PictureBox и RectangleShape не важно и не имеет значения, вы можете использовать RectangleShape легко.

private void CreateBox(int X, int Y, int ObjectType) 
{ 
    ShapeContainer canvas = new ShapeContainer(); 
    RectangleShape box = new RectangleShape(); 
    box.Parent = canvas; 
    box.Size = new System.Drawing.Size(100, 90); 
    box.Location = new System.Drawing.Point(X, Y); 
    box.Name = "Box" + ObjectType.ToString(); 
    box.BackColor = Color.Transparent; 
    box.BorderColor = Color.Transparent; 
    box.BackgroundImage = img.Images[ObjectType];// Load from imageBox Or any resource 
    box.BackgroundImageLayout = ImageLayout.Stretch; 
    box.BorderWidth = 0; 
    canvas.Controls.Add(box); // For feature use 
} 
+0

Попытка сделать это, однако, я не могу заставить RectangleShape появляться поверх других элементов управления (т. Е. Кажется чтобы быть ниже них и поэтому не отображается в форме) – colmde

0

Одно быстрое решение установлено изображением свойства для image1 и установить BackgroundImage свойство imag2, единственное неудобство заключается в том, что у вас есть два изображения внутри коробки изображения, но вы можете изменить свойство фона на плитку, натяжной, и т.д. Убедитесь, что обратная сторона будет прозрачной. Надеюсь, что это поможет

3

GameBoard - это управление типом DataGridView; Изображение должно быть типом PNG с прозрачным фоном альфа-канала;

 Image test = Properties.Resources.checker_black; 
     PictureBox b = new PictureBox(); 
     b.Parent = GameBoard; 
     b.Image = test; 
     b.Width = test.Width*2; 
     b.Height = test.Height*2; 
     b.Location = new Point(0, 90); 
     b.BackColor = Color.Transparent; 
     b.BringToFront(); 

enter image description here

+0

Спасибо, ** myPictureBox.BackColor = Color.Transparent; ** // решил мою проблему –

+0

Рад, что я мог бы помочь (: –

Смежные вопросы