0

特定の時間後に非表示になる2つの別々の場所にあるパネルに2つのピクチャボックスがあります。ピクチャボックスコントロールが配置されている正確なポイントで、ピクチャボックスの背景画像をパネルにペイントしたいと思います。MSDN ライブラリを調べましたが、これを行う方法がわかりません。

助けてくれてありがとう

4

2 に答える 2

0

これに似たことができます:

Bitmap bitmap = new Bitmap(panel1.Size.Width, panel1.Size.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
    g.DrawImage(pictureBox1.BackgroundImage, new Rectangle(pictureBox1.Location, pictureBox1.Size));
    g.DrawImage(pictureBox2.BackgroundImage, new Rectangle(pictureBox2.Location, pictureBox2.Size));
    g.Flush();
}

pictureBox1.Visible = false;
pictureBox2.Visible = false;
panel1.BackgroundImage = bitmap;

または、これを使用して試すことができます:

public class PanelEx : Panel
{
    public PictureBox PictureBox1 { get; set; }
    public PictureBox PictureBox2 { get; set; }
    public bool IsBackgroundDrawn { get; set; }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        if (!IsBackgroundDrawn)
        {
            IsBackgroundDrawn = true;
            base.OnPaintBackground(e);
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        if (PictureBox1 != null && PictureBox2 != null && !IsBackgroundDrawn)
        {
            Bitmap bitmap = new Bitmap(this.Size.Width, this.Size.Height);
            e.Graphics.DrawImage(PictureBox1.BackgroundImage, new Rectangle(PictureBox1.Location, PictureBox1.Size));
            e.Graphics.DrawImage(PictureBox2.BackgroundImage, new Rectangle(PictureBox2.Location, PictureBox2.Size));
            e.Graphics.Flush();

            PictureBox1.Visible = false;
            PictureBox2.Visible = false;
            this.BackgroundImage = bitmap;
            IsBackgroundDrawn = false;
        }
    }
}
于 2012-07-02T14:40:15.037 に答える
0

これを行うには、元の画像と同じ場所に別の 2 つの画像ボックスを作成しますが、その中に画像はありません。そうすれば、それらは常にオリジナルと同じ場所にあります。背景が表示されるように、重複を空のままにします。

于 2012-07-02T14:37:09.367 に答える