【问题标题】:Double click form event VB.NET双击表单事件VB.NET
【发布时间】:2013-10-06 07:46:43
【问题描述】:

我正在使用 VB.NET,想知道如何双击一个表单来最小化它。

我有以下代码,但它不起作用:

Private Sub openPROJECTS_MouseDoubleClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDoubleClick
    'Minimize the form
    Me.WindowState = FormWindowState.Minimized
End Sub

我正在使用 VB.NET。

【问题讨论】:

  • 你在调整大小事件中有代码在做什么吗?您是否设置了一个中断并查看当您单击 dbl 时是否执行此行?那看起来不像Form Dbl Click(args 不正确),那么您要dbl click 的对象是什么?
  • 效果很好。这取决于您单击的内容,当您使用其他控件覆盖表单时,并不总是可以点击表单。考虑到用户自己发现这很不可能,最好还是坚持使用窗口标题栏上的普通 MinimizeBox。
  • @ plutonix 即使我将最小化窗口状态换成一个简单的 msgbox,doule click dosnt seam o 也触发了消息框......在任何情况下表单都没有调整大小
  • 如果可用,每个控件都会触发它自己的双击事件,要么添加额外的 Handles 子句,要么完全摆脱 Handles 并在 foreach 循环中使用 AddHandler 语句

标签: vb.net double-click


【解决方案1】:

问题是每个控件都有它自己的双击事件,所以如果你双击例如表单上的面板,表单的双击事件不会被触发。

但是,您可以添加 MessageFilter,例如

Public Class Minimizer
    Implements IMessageFilter

    Private Const WM_LBUTTONDBLCLK As Integer = &H203

    ReadOnly _form As Form

    Public Sub New(f As Form)
        _form = f
    End Sub

    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
        If m.Msg = WM_LBUTTONDBLCLK Then
            _form.WindowState = FormWindowState.Minimized
        End If
        Return False
    End Function
End Class

还有一个小测试:

Private Sub Main()
    Dim f = New Form()
    f.Controls.Add(New Panel() With { .Dock = DockStyle.Fill })
    Application.AddMessageFilter(New Minimizer(f))
    f.ShowDialog()
End Sub

但我认为如果双击任意位置最小化表单会是一种奇怪的用户体验...

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 2012-01-25
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多