Я делаю приложение в С#.NET. У меня есть 8 ящиков с картинками. Я использовал PNG-изображения с прозрачным фоном, но в моей форме он не прозрачен, когда он появляется над другим изображением.
Я использую Visual Studio 2012. Это скриншот моей формы:
Я делаю приложение в С#.NET. У меня есть 8 ящиков с картинками. Я использовал PNG-изображения с прозрачным фоном, но в моей форме он не прозрачен, когда он появляется над другим изображением.
Я использую Visual Studio 2012. Это скриншот моей формы:
Один из способов сделать это - изменить родительский элемент перекрывающегося окна изображения на 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;
}
Просто измените имена полей изображений на то, что вам нужно. Это должно возвратиться:
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();
Попробуйте использовать ImageList
ImageList imgList = new ImageList;
imgList.TransparentColor = Color.White;
Загрузите изображение следующим образом:
picturebox.Image = imgList.Images[img_index];
У меня была аналогичная проблема. Вы не можете сделать 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
}
Одним быстрым решением является заданное свойство изображения для изображения1 и задано свойство backgroundimage для imag2, единственное неудобство состоит в том, что у вас есть два изображения внутри поля изображения, но вы можете изменить свойства фона на черепицу, растянутую и т.д. Убедитесь, что backcolor быть прозрачным. Надеюсь, что это поможет
вы можете установить PictureBox
BackColor
свойство Transparent