winforms 为什么窗体移动会触发ResizeEnd?

4dbbbstv  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(212)

我在表单中使用下列程式码:

Public Class Form1
    Private Sub Form1_ResizeEnd(sender As Object, e As EventArgs) Handles MyBase.ResizeEnd
        MsgBox("Resized")
    End Sub
End Class

当我移动我的窗体时,它似乎也触发了MyBase.ResizeEnd。这是为什么呢?移动面板不会改变大小,所以我不明白为什么。

kupeojn6

kupeojn61#

为什么窗体移动会触发ResizeEnd?
因为这是文档中记录的行为。
ResizeEnd事件也会在使用者移动表单之后产生,通常是在标题列上按一下并拖曳。
如果希望在移动窗体时不触发某个事件,则应该使用ResizeSizeChanged。这两个事件的问题是,* 当用户调整 * 窗体大小时,它们将被触发。要解决此问题,您可以将它与ResizeBeginResizeEnd一起使用,并在用户实际完成调整窗体大小时使用两个标志。
下面是一个完整的示例:

Private _resizeBegin As Boolean
Private _sizeChanged As Boolean

Private Sub Form1_ResizeBegin(sender As Object, e As EventArgs) Handles MyBase.ResizeBegin
    _resizeBegin = True
End Sub

Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
    ' This is to avoid registering this as a resize event if it was triggered
    ' by another action (e.g., when the form is first initialized).
    If Not _resizeBegin Then Exit Sub

    _sizeChanged = True
End Sub

Private Sub Form1_ResizeEnd(sender As Object, e As EventArgs) Handles MyBase.ResizeEnd
    _resizeBegin = False
    If _sizeChanged Then
        _sizeChanged = False
        MessageBox.Show("The form has been resized.")
    End If
End Sub

需要注意的一点是,ResizeBeginResizeEnd仅在用户 * 手动 * 调整 * 表单大小时触发。但是,它 * 不 * 处理其他情况,如通过代码调整表单大小、表单最大化或还原。

  • 或移动表单,这是我们在这里要避免的部分。

相关问题