图片框中的图纸尺寸最大化然后归一化

时间:2015-09-14 19:55:44

标签: vb.net drawing picturebox

我有一个包含图片框的表单。在代码隐藏中,我在这个图片框中画了一些东西。这些图纸的大小取决于图片框的大小(例如,宽度为框宽度的90%的圆圈)。当表单加载时,它处于正常状态,看起来很好。我可以最大化窗体,当我相应地控制尺寸时,图片框中的图形也会相应地调整大小 - 所以看起来都很好。问题是当我然后将表单恢复到正常状态时:控件相应地调整大小,但图片框中的图形没有(因此它的一些被切断,因为它太大了)。我尝试使用Me.Resize事件来调用绘制图形的逻辑,但出于某种原因,当调用它时,仍然认为图片框的宽度是处于最大化状态时的宽度。

那么为什么在最大化表单时图片框中的图形会大小调整,但是当你将其恢复到正常状态时却不会调整大小?

为什么它仍然认为盒子的宽度是最大化的,而不是正常的宽度,这是它现在所处的状态?

有没有办法绕过这个,所以我可以确保图形会正确调整大小?

注意:我会尝试使用ResizeEnd事件,但是在最大化或恢复表单时不会引发此事件。我也不知道为什么会这样。

1 个答案:

答案 0 :(得分:1)

如果没有看到代码,前两个问题很难回答。如果您正在绘制控件,那么您应该强制重新计算并从该控件的事件中重新绘制。可能是你在活动中的表现或方式。

Is there a way to get around this so I can make sure the graphics will resize correctly?

我使用了一个面板和ClientSizeChanged事件,无论表单是手动调整还是最小值和最大值,它都能正常工作:

Private myRect As Rectangle
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    RecalcRect()
End Sub

Private Sub pnl_ClientSizeChanged(sender As Object, 
       e As EventArgs) Handles pnl.ClientSizeChanged
    RecalcRect()
    pnl.Invalidate()
End Sub

Private Sub RecalcRect()
    myRect = New Rectangle(0, 0, pnl.Width, pnl.Height)
    myRect.Inflate(-10, -10)
End Sub

Private Sub pnl_Paint(sender As Object, 
          e As PaintEventArgs) Handles pnl.Paint
    e.Graphics.FillEllipse(Brushes.OrangeRed, myRect)
End Sub

Recalc可以在Paint事件中调用甚至完成,我试图模仿类似于你在其他地方使用calcs描述的内容。