2

パネルの内容を画像ボックスに表示される画像に保存しようとしています。以下に示すように、 drawtobitmap メソッドを使用しています。

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

    Dim bmp As New Bitmap(Panel1.Width, Panel1.Height)
    Panel1.DrawToBitmap(bmp, Panel1.ClientRectangle)
    PictureBox1.BackgroundImage = bmp

End Sub

ピクチャボックスには画像が表示されますが、描画順序が正しくありません。

ここに画像の説明を入力

左側のボックスは、3 つのボタンがあるパネルです。右側のボックスはピクチャーボックスです。順序がどのように異なるかに注意してください。順序がパネルに表示されるのと同じになるように、これを修正する方法について何か提案はありますか?

4

3 に答える 3

2

私はこれを c# で行いましたが、翻訳できるはずです。

private void button3_Click(object sender, EventArgs e)
{
    ReverseControls(panel1);

    var bmp = new Bitmap(panel1.Width, panel1.Height);
    panel1.DrawToBitmap(bmp, panel1.ClientRectangle);
    pictureBox1.BackgroundImage = bmp;

    ReverseControls(panel1);
}

static void ReverseControls(Panel panel)
{
    var controls = panel.Controls.Cast<Control>().Reverse().ToArray();
    panel.Controls.Clear();
    panel.Controls.AddRange(controls);
}

コントロールを逆の順序で描画しているため、コントロールの逆のリストを取得して、それらを削除/読み取ります。次に、ビットマップを描画した後、それらを元に戻します。

于 2012-11-01T19:55:43.293 に答える
1

Jon B. z オーダーを逆にするのは正しかったのですが、代わりに以下の方法でそれを行うことができました。ご協力ありがとうございました!:)

For Each ctl As Control In Me.Controls.OfType(Of Control).OrderBy(Function(c) Me.Controls.GetChildIndex(c))
ctl.BringToFront()
Next
于 2012-11-07T22:16:25.533 に答える