2015-09-14 17 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