Picture Box 中的绘图在最大化然后归一化时的大小

Size of Drawings in Picture Box when maximized then normalized

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

那么为什么在最大化窗体时图片框中的图形可以很好地调整大小,而恢复正常时却不能?

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

有什么办法可以解决这个问题,这样我就可以确保图形能够正确调整大小?

注意:我会尝试改用 ResizeEnd 事件,但当您最大化或恢复表单时不会引发该事件。我也不知道为什么。

如果不看代码,前两个问题很难回答。如果您正在控件上绘图,那么您应该从该控件的事件中强制重新计算和重新绘制。这可能是您在活动中的表现或表现。

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 事件中调用,甚至可以在 Paint 事件中完成,我试图模拟类似于您在其他地方用计算描述的内容。