web-dev-qa-db-ja.com

ピクチャーボックスを透明にする方法は?

C#.NETでアプリケーションを作成しています。 8つの画像ボックスがあります。背景が透明なPNG画像を使用しましたが、私のフォームでは、別の画像の上に来ると透明ではありません。

Visual Studio 2012を使用しています。これはフォームのスクリーンショットです。

Screenshot of Form

20
Belal Khan

これを行う1つの方法は、オーバーラップするピクチャボックスの親を、ラップするピクチャボックスに変更することです。 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

53
SuperPrograman

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

6
Stav Bodik

このような同様の問題がありました。 .NET FrameworkおよびVS .NETオブジェクトは継承によって作成されるため、このページの上部に表示される画像のように、透過ピクチャボックスを簡単に作成することはできません! (親プロパティを使用)。

RectangleShapeでこの問題を解決し、以下のコードで背景を削除しました。PictureBoxRectangleShapeの違いが重要ではなく、重要でない場合は、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
Hamed Mirzaei

ImageList を使用してみてください

ImageList imgList = new ImageList;

imgList.TransparentColor = Color.White;

次のように画像をロードします。

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

1つの高速なソリューションは、image1の画像プロパティを設定し、backgroundimageプロパティをimag2に設定することです。唯一の不都合は、画像ボックス内に2つの画像があることです。 。お役に立てれば

0
i31nGo