2015-09-14 16 views
1

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

那么为什么图片框中的图形在您将表单最大化时调整得很好,但是当您将其恢复到正常状态时却无法调整大小?

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

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

注意:我会尝试使用ResizeEnd事件,但在您最大化或还原窗体时不会引发这种情况。我也不知道这是为什么。

回答

1

如果没有看到代码,前两个问题很难回答。如果您正在绘制控件,则应该强制重新从该控件的事件中重新绘制并重绘。这可能是你在事件中如何或正在做什么。

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

我使用的面板和ClientSizeChanged事件和正常工作的形式是手动调整大小或Min和刷爆:

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可以从被称为甚至在画图完成事件,我试图效仿类似于你在其他地方用calc描述的东西。

+0

是的,使图形的逻辑在窗体的Paint事件中被调用。所以我添加了在图片框的ClientSizeChanged事件中进行同样的调用,就像你有,并且工作!谢谢! – Andarta