web-dev-qa-db-fra.com

Comment rendre picturebox transparent?

Je fais une application en C # .NET. J'ai 8 boîtes d'image dedans. J'ai utilisé des images PNG avec un arrière-plan transparent, mais dans mon formulaire, il n'est pas transparent lorsqu'il survole une autre image.

J'utilise Visual Studio 2012. Voici une capture d'écran de mon formulaire: 

Screenshot of Form

16
Belal Khan

Une façon de faire est de changer le parent de la zone d'image qui se chevauche en une PictureBox sur laquelle elle chevauche. Le concepteur Visual Studio ne vous autorisant pas à ajouter un PictureBox à un PictureBox, vous devez le faire dans votre code (Form1.cs) et dans la fonction Intializing:

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

Il suffit de changer les noms de la boîte à images selon vos besoins. Cela devrait retourner:

enter image description here

46
SuperPrograman

GameBoard est un contrôle de type DataGridView.

        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

5
Stav Bodik

J'ai un problème similaire comme celui-ci . Vous ne pouvez pas créer facilement une image transparente, telle qu'une image illustrée en haut de cette page, car les objets .NET Framework et VS .NET sont créés par INHERITANCE! (Utiliser la propriété parent).

J'ai résolu ce problème par RectangleShape et avec le code ci-dessous, j'ai supprimé l'arrière-plan, Si la différence entre PictureBox et RectangleShape n'est pas importante et que cela n'a pas d'importance, vous pouvez utiliser RectangleShape facilement.

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
Hamed Mirzaei

Essayez d’utiliser une ImageList

ImageList imgList = new ImageList;

imgList.TransparentColor = Color.White;

Chargez l'image comme ceci:

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

Une solution rapide consiste à définir la propriété image pour image1 et la propriété backgroundimage à imag2. Le seul inconvénient est que vous avez les deux images à l'intérieur de la zone d'image, mais que vous pouvez modifier les propriétés de l'arrière-plan en mosaïque, streched, etc. Assurez-vous que la couleur de fond est transparente .J'espère que cela t'aides

0
i31nGo