Solved

Create a Taskbar of Open MDI Child Forms

Posted on 2009-04-10
15
1,097 Views
Last Modified: 2012-06-21
I want to create a task bar similar to windows (with the start button) that displays all open mdi child forms.
I would like them to be able to click on a child form and bring it to the front.
Please provide sample code and not a link.  My IE crashes when I click on links.
Thanks
0
Comment
Question by:Sheritlw
  • 8
  • 7
15 Comments
 
LVL 48

Expert Comment

by:jpaulino
ID: 24118909
Here's an example how you can do that.
Add a StatusStrip to your mdi form, create a new ToolStripStatusLabel on the StatusStrip and use this code adapting for your needs:

Public Class Form1
 

    Private x As Byte

    Private WithEvents TaskbarMenu As ContextMenuStrip
 

    ' When clicked on the label ...

    Private Sub ToolStripStatusLabel1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripStatusLabel1.Click
 

        ' Checks if the menu is already created

        If TaskbarMenu IsNot Nothing Then

            TaskbarMenu.Dispose()

        End If

        TaskbarMenu = New ContextMenuStrip
 

        ' Adds new itens to the ContextMenuStrip

        For Each f As Form In Me.MdiChildren

            TaskbarMenu.Items.Add(f.Text)

        Next
 

        ' Shows the menu

        TaskbarMenu.Show(Me.StatusStrip1, New Point(StatusStrip1.Location.X, 0), ToolStripDropDownDirection.AboveRight)

    End Sub
 

    ' Adds a new form with diferent names

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim f As New Form2

        f.MdiParent = Me

        f.Name = "Form" & x

        f.Text = "Form" & x

        f.Show()

        x += 1

    End Sub
 

    ' When a item is clicked

    Private Sub TaskbarMenu_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles TaskbarMenu.ItemClicked
 

        ' Gets the selected form and show it

        Dim frm As Form = My.Application.OpenForms(e.ClickedItem.Text)

        If frm IsNot Nothing Then

            frm.BringToFront()

        End If
 

    End Sub
 

End Class

Open in new window

0
 

Author Comment

by:Sheritlw
ID: 24120161
Hi Jpaulino,

How do I make the status strip just show the form names along the bottom, instead of as a menu item... similar to the Windows Taskbar?  

Thanks
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 24120169
Have you tried ?
0
 

Author Comment

by:Sheritlw
ID: 24120181
Yes, I have, but can't figure out what to declare it as.

Dim ft As New frmMembers
        TaskbarMenu = New ContextMenuStrip

        ft.MdiParent = Me
        ft.WindowState = Me.WindowState
        ft.Show()
        ' Dim f As New Form2
        ' f.MdiParent = Me
        ft.Name = "frmMembers" & x
        ft.Text = "Teams/Members" & x
        ft.Show()
        TaskbarMenu.Items.Add(ft.Text)
        x += 1
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 24120201
You don't need that .. I have only used to have diferent names for the forms. You just need to use ToolStripStatusLabel1 click event.
0
 

Author Comment

by:Sheritlw
ID: 24120235
I do have all your code in there and when I click on the status bar it does say what the form text is... but
I wanted the status strip to display the forms that are open something like...

Members 0     Timers 0     Members 1   Races 0

Above is an example of the statusstrip which displays all the child forms that are open.   They toolstripstatuslabel should display the name of the form and then when they click on the name, it brings that instance of the form to the front.

Right now I have to click on the status strip to get a name to display.

Thanks,


0
 
LVL 48

Expert Comment

by:jpaulino
ID: 24120244
Ok, I have understood it wrong !
You want the names in the status bar ? But for that you have to call a function each time you open or close a new child form.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:Sheritlw
ID: 24120271
Yes,  that is why I added the add.item to the click event of the form being opened.
I figured it shouldn't be declared as contextmenu etc., but not sure.  I tried with the intellisence to see if there was anything else that made since, but with no luck.
I don't mind calling a function when I load a form, just don't know what the code would be.
Thanks
0
 
LVL 48

Accepted Solution

by:
jpaulino earned 500 total points
ID: 24120306
Ok, then try this way:
 

' FORM LOAD EVENT FOR ALL FORMS

        ' Adds new item to the ContextMenuStrip

        Dim ts As New ToolStripStatusLabel

        ts.Text = Me.Text

        AddHandler ts.Click, AddressOf showForm

        My.Forms.Form1.StatusStrip1.Items.Add(ts)
 

' INSIDE A MODULE

    Public Sub showForm(ByVal sender As Object, ByVal e As System.EventArgs)
 

        Dim t As ToolStripStatusLabel = DirectCast(sender, ToolStripStatusLabel)
 

        ' Gets the selected form and show it

        Dim frm As Form = My.Application.OpenForms(t.Text)

        If frm IsNot Nothing Then

            frm.BringToFront()

        End If
 

    End Sub
 

' You should also remove the item from the statusstrip when you close the form

Open in new window

0
 

Author Comment

by:Sheritlw
ID: 24120340
So far this is great.
Only problem I'm having is I put the call to the showform sub procedure in...

Private Sub StatusStrip1_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles StatusStrip1.ItemClicked
        showForm(sender, e)

        'Dim frm As Form = My.Application.OpenForms(e.ClickedItem.Text)
        'If frm IsNot Nothing Then
        '    frm.BringToFront()
        'End If

    End Sub

Unfortunetly the sender is not of the same type.  Where should I put the call to the showform procedure?
Thanks
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 24120359
You don't need this code you have showed!
When you create the new ToolStripStatusLabel in the form load it adds handler to the showForm. The showForm does that already
0
 

Author Comment

by:Sheritlw
ID: 24120584
Hi jpaulino,

I tried to click on it without using the statusbar itemclick event, but nothing happens.
I added ...
Dim ts As New ToolStripStatusLabel
        ts.Text = Me.Text
        AddHandler ts.Click, AddressOf showForm
        My.Forms.frmMain.StatusStrip1.Items.Add(ts)  

to every child forms load event.
I also added your sub procedure to a module.

Public Sub showForm(ByVal sender As Object, ByVal e As System.EventArgs)

        Dim t As ToolStripStatusLabel = DirectCast(sender, ToolStripStatusLabel)

        ' Gets the selected form and show it
        Dim frm As Form = My.Application.OpenForms(t.Text)
        If frm IsNot Nothing Then
            frm.BringToFront()
        End If

    End Sub

What am I doing wrong?
Thanks
0
 

Author Comment

by:Sheritlw
ID: 24120755
Hi JPaulino,

I have it working.  
I only added name to both the load procedure and the module.
ts.Name = Me.Name  (in load)
Dim frm As Form = My.Application.OpenForms(t.Name)   (In module)

You are GREAT!   I really appreciate all your help.

Thank you,
Sheri
0
 

Author Closing Comment

by:Sheritlw
ID: 31569027
Excellent!!!!
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 24122051
Sorry I was out for some hours!
Glad I could help!
jpaulino
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Introduction When many people think of the WebBrowser (http://msdn.microsoft.com/en-us/library/2te2y1x6%28v=VS.85%29.aspx) control, they immediately think of a control which allows the viewing and navigation of web pages. While this is true, it's a…
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…

895 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now