?
Solved

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

Posted on 2010-08-17
5
Medium Priority
?
749 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 200 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 200 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

Independent Software Vendors: 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

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…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

719 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