在vb.net中最大化或还原事件之前捕获
本文关键字:事件 还原 vb net 最大化 | 更新日期: 2023-09-27 17:58:48
从maximum开始缩小时,我需要将表单的高度和宽度设置为某个值。为了做到这一点,我使用表单的重新大小事件来捕获表单的最大化和恢复事件。现在,问题是在表单最大化或恢复后触发事件。因此,表单首先缩小到一定的高度和宽度,然后我设置了需要为表单设置的高度-宽度。这个过渡看起来很不整洁。
所以,我需要以某种方式捕获表单的还原前和最大化前事件。这样,我就可以在它改变大小之前声明大小。请建议,如果这是可能的,如果没有,还有什么更好的方法来处理这种过渡。
以下是我现在用来捕获恢复和最大化事件的代码:
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
您可以覆盖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
这是其他命令的列表。
这就是您想要的吗?
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