我正在尝试将面板内容保存到图片框中显示的图像。我正在使用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个按钮的面板。右边的框是图片框。注意排序有何不同。有没有人有任何关于如何解决此问题的建议,以便排序与面板上显示的相同?
答案 0 :(得分: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);
}
由于它以相反的顺序绘制控件,我只是得到一个反向的控件列表并删除/读取它们。然后在绘制位图后取消它们的反转。
答案 1 :(得分: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
答案 2 :(得分:0)
这适用于VB.net
' flip all Controls to reverse order
For I As Int32 = MyPanel.Controls.Count - 1 To 0 Step -1
MyPanel.Controls(I).SendToBack()
Next
'create Bitmap of Panel for Printer
MyPanel.DrawToBitmap(bm, r)
' flip Controls again to restore original order on Screen
For I As Int32 = MyPanel.Controls.Count- 1 To 0 Step -1
MyPanel.Controls(I).SendToBack()
Next