2014-04-18 27 views
0

在從最大化縮小尺寸時,我需要將窗體的高度和寬度設置爲特定值。爲此,我使用表單的re尺寸事件捕獲表單的最大化和恢復事件。現在,問題是事件在表單最大化或恢復後觸發。因此,表單首先縮小到特定的高度和寬度,然後設置我需要爲表單設置的高度寬度。這種轉變看起來非常不整潔。在vb.net中最大化或恢復事件之前捕獲

所以,我以某種方式需要捕獲之前恢復和最大化形式的事件之前。所以,我可以在更改大小之前聲明大小。請建議,如果這是可能的,如果沒有什麼可以更好的方式來處理這種轉變。

下面是我現在使用捕捉恢復,最大限度地提高事件的代碼:

Protected Overrides Sub OnResize(ByVal e As System.EventArgs) 
    MyBase.OnResize(e) 
    Select Case Me.WindowState 
     Case FormWindowState.Normal 
      MessageBox.Show("Form was restored", 
      Application.ProductName) 
     Case FormWindowState.Minimized 
      MessageBox.Show("Form was minimized", 
      Application.ProductName) 
     Case FormWindowState.Maximized 
      MessageBox.Show("Form was maximized", 
      Application.ProductName) 
    End Select 
End Sub 

回答

0

您可以覆蓋Form.WndProc方法:

Protected Overrides Sub WndProc(ByRef m As Message) 
    Const WM_SYSCOMMAND As Integer = &H112 
    Const SC_RESTORE As Integer = &HF120 
    Const SC_MAXIMIZE As Integer = &HF030 

    If m.Msg = WM_SYSCOMMAND Then 
     If m.WParam = New IntPtr(SC_RESTORE) Then 
      ' do something before restore 
      Me.Size = New Size(666, 666) 
     ElseIf m.WParam = New IntPtr(SC_MAXIMIZE) Then 
      ' do something before maximize 
     End If 
    End If 

    MyBase.WndProc(m) ' allow form to process this message 
End Sub 

而且here是其他命令的列表。

+0

感謝您的回覆。我已經試過了。這與resize事件方法類似。所以,在表格縮小之後,這會告訴我。 – Harsh

0

是你在找什麼?

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle 
End Sub 

Private Sub Form1_SizeChanged(sender As Object, e As System.EventArgs) Handles Me.SizeChanged 
    If WindowState = FormWindowState.Normal Then 
     Me.Size = New Size(iWidth, iHeight) 
    End If 
End Sub 
相關問題