Как сделать прозрачный прозрачный?
Я делаю приложение в C # .NET. У меня есть 8 ящиков с картинками. Я использовал PNG-изображения с прозрачным фоном, но в моей форме он не прозрачен, когда он появляется над другим изображением.
Я использую Visual Studio 2012. Это скриншот моей формы:
- Вставка экземпляра File Explorer в форму приложения Windows Forms
- Как создать окно сообщения с параметрами «Да», «Нет» и «Диалоговое окно»?
- Отображение всплывающей подсказки по кнопке с помощью Windows Forms
- Как улучшить производительность графики DataGridView?
- Как правильно выйти из приложения C #?
- LINQ объединяет две таблицы данных
- Ribbon UI Control для WinForms
- В чем разница между Application.ThreadException и AppDomain.CurrentDomain.UnhandledException?
- Как заставить WinForms молча игнорировать необработанные исключения?
- Как отключить некоторые даты в элементе управления DateTimePicker?
- Избегайте беды Invoke / BeginInvoke в обработке событий в WinForm для кросс-streamов?
- Получить путь к исполняемому каталогу приложения Windows Forms
- Обнаружение, если событие вставки произошло в расширенном текстовом поле
Один из способов сделать это – изменить родительский элемент перекрывающегося windows изображения на 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, единственное неудобство состоит в том, что у вас есть два изображения внутри поля изображения, но вы можете изменить свойства фона на черепицу, растянутую и т. Д. Убедитесь, что обратная сторона будет прозрачной , Надеюсь это поможет
вы можете установить свойство PictureBox
BackColor
для Transparent