2013-09-30 84 views
1

我正在使用VB.NET,并想知道如何双击表单来最小化它。双击窗体事件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。

+0

你有代码在resize事件做点什么?你是否设置了休息时间,并在dbl单击时查看该行是否执行?这看起来不像Form Dbl Click(参数不正确),那么你想要dbl单击的对象是什么? – Plutonix

+2

这工作得很好。它取决于你点击的内容,当你用其他控件覆盖它时,并不总是可能的。考虑到用户不太可能会发现这可以自行工作,最好在窗口的标题栏上粘贴正常的MinimizeBox。 –

+0

@ plutonix即使我交换了msgbox的最小窗口状态doule点击dosnt seam o触发消息框......在任何情况下,表格不会调整大小 –

回答

0

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

但是,您可以添加一个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 

但我认为这将是一个奇怪的用户体验,如果双击的形式最大限度地减少任何地方...