在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

在vb.net中最大化或还原事件之前捕获

您可以覆盖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