C#.NETでアプリケーションを作成しています。 8つの画像ボックスがあります。背景が透明なPNG画像を使用しましたが、私のフォームでは、別の画像の上に来ると透明ではありません。
Visual Studio 2012を使用しています。これはフォームのスクリーンショットです。
これを行う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;
}
ピクチャボックス名を必要なものに変更するだけです。これは返されるはずです:
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();
このような同様の問題がありました。 .NET FrameworkおよびVS .NETオブジェクトは継承によって作成されるため、このページの上部に表示される画像のように、透過ピクチャボックスを簡単に作成することはできません! (親プロパティを使用)。
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
}
ImageList
を使用してみてください
ImageList imgList = new ImageList;
imgList.TransparentColor = Color.White;
次のように画像をロードします。
picturebox.Image = imgList.Images[img_index];
1つの高速なソリューションは、image1の画像プロパティを設定し、backgroundimageプロパティをimag2に設定することです。唯一の不都合は、画像ボックス内に2つの画像があることです。 。お役に立てれば