我有一个包含图片框的表单。在代码隐藏中,我在这个图片框中画了一些东西。这些图纸的大小取决于图片框的大小(例如,宽度为框宽度的90%的圆圈)。当表单加载时,它处于正常状态,看起来很好。我可以最大化窗体,当我相应地控制尺寸时,图片框中的图形也会相应地调整大小 - 所以看起来都很好。问题是当我然后将表单恢复到正常状态时:控件相应地调整大小,但图片框中的图形没有(因此它的一些被切断,因为它太大了)。我尝试使用Me.Resize事件来调用绘制图形的逻辑,但出于某种原因,当调用它时,仍然认为图片框的宽度是处于最大化状态时的宽度。
那么为什么在最大化表单时图片框中的图形会大小调整,但是当你将其恢复到正常状态时却不会调整大小?
为什么它仍然认为盒子的宽度是最大化的,而不是正常的宽度,这是它现在所处的状态?
有没有办法绕过这个,所以我可以确保图形会正确调整大小?
注意:我会尝试使用ResizeEnd事件,但是在最大化或恢复表单时不会引发此事件。我也不知道为什么会这样。
答案 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描述的内容。