Solved

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

Posted on 2010-08-17
5
716 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
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 85

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 85

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

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

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

Suggested Solutions

In my previous article (http://www.experts-exchange.com/Programming/Languages/.NET/.NET_Framework_3.x/A_4362-Serialization-in-NET-1.html) we saw the basics of serialization and how types/objects can be serialized to Binary format. In this blog we wi…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

830 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