Solved

MDIParent Form Double-Click Event Does Not Fire - VB.NET

Posted on 2010-08-17
5
736 Views
Last Modified: 2013-11-27
Hi

I hope somebody can assist Me with the following problem:

My startup form is my MDIParent form named FrmMain. After this form shows I have a Timer Control which executes the Following code and works as I want it to:

Timer_Click .........................................

   Dim Myform As New FrmLogo
   MyForm.MDIParent = Me
   MyForm.Show

End Sub

The above works perfectly.

The User now closes this Logo Form when he is sick and tired of it.

Now I want to recall this form with the same logic as above but in FrmMain's Double-Click Event.
Amazingly enough, nothing happens.

Can somebody please provide me with a pointer as to what I am doing wrong. I am using VB.NET in Visual Studio 2008 under Windows XP Professional.

Thanks.
0
Comment
Question by:Nolanc
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 
LVL 17

Accepted Solution

by:
Zhaolai earned 50 total points
ID: 33455721
Interesting..
It's said that this is by design.

Check out this link for an alternative:

http://social.msdn.microsoft.com/Forums/en/vbinterop/thread/b498ac7b-9fc5-43cd-9b35-84a3518875c0
0
 
LVL 16

Expert Comment

by:13598
ID: 33456090
You could try using just forms but show the forms you want to act as children by using showdialog instead of show, as in:
MyForm.ShowDialog
That shows MyForm as a modal form with the main form set as its owner.
0
 
LVL 86

Assisted Solution

by:Mike Tomlinson
Mike Tomlinson earned 50 total points
ID: 33459009
Here's something to get you started...
Public Class Form1

    Private WithEvents mf As MyFilter

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each ctl As Control In Me.Controls
            If TypeOf ctl Is MdiClient Then
                mf = New MyFilter(ctl.Handle)
                Application.AddMessageFilter(mf)
                Exit For
            End If
        Next
    End Sub

    Private Sub mf_DoubleClick() Handles mf.DoubleClick
        Debug.Print("Double Click on MdiClient")
    End Sub

    Private Class MyFilter
        Implements IMessageFilter

        Private mc As IntPtr
        Private SW As New Stopwatch

        Private Const WM_LBUTTONDOWN As Integer = &H201

        Public Event DoubleClick()

        Public Sub New(ByVal handle As IntPtr)
            Me.mc = handle
        End Sub

        Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
            Select Case m.Msg
                Case WM_LBUTTONDOWN
                    If m.HWnd.Equals(Me.mc) Then
                        If Not SW.IsRunning Then
                            SW.Start()
                        Else
                            SW.Stop()
                            If SW.ElapsedMilliseconds <= SystemInformation.DoubleClickTime Then
                                RaiseEvent DoubleClick()
                            End If
                            SW.Reset()
                            SW.Start()
                        End If
                    End If

            End Select
            Return False
        End Function

    End Class

End Class

Open in new window

0
 

Author Closing Comment

by:Nolanc
ID: 33462942
Hi

Thanks for your contributions. They have at least provided a way around a poor showing from Microsoft. How can you provide events that are in 'Sleep" mode.

Many thanks.
0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 33464177
What did you mean by this question?

    "How can you provide events that are in 'Sleep" mode."
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

622 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question