Results 1 to 4 of 4

Thread: [RESOLVED] Probably obvious yet weird error with a ToolStripMenuItem

  1. #1

    Thread Starter
    Fanatic Member
    Join Date
    Jul 2009
    Posts
    629

    Resolved [RESOLVED] Probably obvious yet weird error with a ToolStripMenuItem

    Hello everyone.

    I had a lengthy subroutine with handler routines, like this, before:
    Code:
        Private Sub CompMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
    ToolStripMenuItem3.Click, ToolStripMenuItem4.Click, ToolStripMenuItem5.Click, ToolStripMenuItem6.Click, _
    ToolStripMenuItem7.Click, ToolStripMenuItem8.Click, ToolStripMenuItem10.Click, ToolStripMenuItem11.Click, _
    ToolStripMenuItem12.Click, ToolStripMenuItem13.Click, ToolStripMenuItem14.Click, ToolStripMenuItem15.Click, _
    ToolStripMenuItem16.Click, ToolStripMenuItem18.Click, ToolStripMenuItem19.Click, ToolStripMenuItem20.Click, _
    ToolStripMenuItem21.Click, ToolStripMenuItem23.Click, ToolStripMenuItem24.Click, ToolStripMenuItem26.Click, _
    ToolStripMenuItem27.Click, ToolStripMenuItem28.Click, ToolStripMenuItem29.Click, ToolStripMenuItem30.Click, _
    ToolStripMenuItem31.Click, ToolStripMenuItem33.Click, ToolStripMenuItem34.Click, ToolStripMenuItem36.Click, _
    ToolStripMenuItem37.Click, ToolStripMenuItem38.Click, ToolStripMenuItem40.Click, ToolStripMenuItem41.Click, _
    ToolStripMenuItem43.Click, ToolStripMenuItem44.Click, ToolStripMenuItem46.Click, ToolStripMenuItem47.Click, _
    ToolStripMenuItem48.Click, ToolStripMenuItem49.Click, ToolStripMenuItem50.Click, ToolStripMenuItem52.Click, _
    ToolStripMenuItem53.Click, ToolStripMenuItem55.Click, ToolStripMenuItem56.Click, ToolStripMenuItem57.Click, _
    ToolStripMenuItem58.Click, ToolStripMenuItem59.Click
    'subroutine (handling the name) code here
    But since I have to loop through all these items to check the Tag associated, I decided to add it to an array:
    Code:
        Private ComponentItems() As ToolStripMenuItem = New ToolStripMenuItem() { _
        ToolStripMenuItem3, ToolStripMenuItem4, ToolStripMenuItem5, ToolStripMenuItem6, _
        ToolStripMenuItem7, ToolStripMenuItem8, ToolStripMenuItem10, ToolStripMenuItem11, _
        ToolStripMenuItem12, ToolStripMenuItem13, ToolStripMenuItem14, ToolStripMenuItem15, _
        ToolStripMenuItem16, ToolStripMenuItem18, ToolStripMenuItem19, ToolStripMenuItem20, _
        ToolStripMenuItem21, ToolStripMenuItem23, ToolStripMenuItem24, ToolStripMenuItem26, _
        ToolStripMenuItem27, ToolStripMenuItem28, ToolStripMenuItem29, ToolStripMenuItem30, _
        ToolStripMenuItem31, ToolStripMenuItem33, ToolStripMenuItem34, ToolStripMenuItem36, _
        ToolStripMenuItem37, ToolStripMenuItem38, ToolStripMenuItem40, ToolStripMenuItem41, _
        ToolStripMenuItem43, ToolStripMenuItem44, ToolStripMenuItem46, ToolStripMenuItem47, _
        ToolStripMenuItem48, ToolStripMenuItem49, ToolStripMenuItem50, ToolStripMenuItem52, _
        ToolStripMenuItem53, ToolStripMenuItem55, ToolStripMenuItem56, ToolStripMenuItem57, _
        ToolStripMenuItem58, ToolStripMenuItem59}
    Now I tried to add the handlers manually in the Form_Load subroutine:
    Code:
            For Each compitem As ToolStripMenuItem In ComponentItems
                AddHandler compitem.Click, AddressOf CompMenuItem_Click
            Next
    But now the compitem is nothing all of a sudden, and I have no idea why. I declared the array correctly, didn't I?
    Without the "New ToolStripMenuItem()" part it fails with the same error.
    Object reference not set to an instance of an object.
    Note: all items are not under the same parent item, so I can't use the "DropDownItemClicked" event.

  2. #2
    eXtreme Programmer .paul.'s Avatar
    Join Date
    May 2007
    Location
    Chelmsford UK
    Posts
    26,424

    Re: Probably obvious yet weird error with a ToolStripMenuItem

    the problem is, you're declaring ComponentItems at form level + at the time ComponentItems is initialized, those toolstripmenuitems don't exist. here's the solution:

    vb Code:
    1. Public Class Form1
    2.  
    3.     Private ComponentItems() As ToolStripMenuItem
    4.  
    5.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6.         ComponentItems = New ToolStripMenuItem() { _
    7.         ToolStripMenuItem3, ToolStripMenuItem4, ToolStripMenuItem5, ToolStripMenuItem6, _
    8.         ToolStripMenuItem7, ToolStripMenuItem8, ToolStripMenuItem10, ToolStripMenuItem11, _
    9.         ToolStripMenuItem12, ToolStripMenuItem13, ToolStripMenuItem14, ToolStripMenuItem15, _
    10.         ToolStripMenuItem16, ToolStripMenuItem18, ToolStripMenuItem19, ToolStripMenuItem20, _
    11.         ToolStripMenuItem21, ToolStripMenuItem23, ToolStripMenuItem24, ToolStripMenuItem26, _
    12.         ToolStripMenuItem27, ToolStripMenuItem28, ToolStripMenuItem29, ToolStripMenuItem30, _
    13.         ToolStripMenuItem31, ToolStripMenuItem33, ToolStripMenuItem34, ToolStripMenuItem36, _
    14.         ToolStripMenuItem37, ToolStripMenuItem38, ToolStripMenuItem40, ToolStripMenuItem41, _
    15.         ToolStripMenuItem43, ToolStripMenuItem44, ToolStripMenuItem46, ToolStripMenuItem47, _
    16.         ToolStripMenuItem48, ToolStripMenuItem49, ToolStripMenuItem50, ToolStripMenuItem52, _
    17.         ToolStripMenuItem53, ToolStripMenuItem55, ToolStripMenuItem56, ToolStripMenuItem57, _
    18.         ToolStripMenuItem58, ToolStripMenuItem59}
    19.     End Sub
    20.  
    21. End Class

  3. #3
    VB Addict Pradeep1210's Avatar
    Join Date
    Apr 2004
    Location
    Inside the CPU...
    Posts
    6,614

    Re: Probably obvious yet weird error with a ToolStripMenuItem

    If you declare it at form level like that, it will be nothing, because those variables are initialized when the form is being created and no controls are yet created.

    You will have to do it like this:
    vb.net Code:
    1. Public Class Form1
    2.     '' declare here
    3.     Private ComponentItems() As ToolStripMenuItem
    4.  
    5.     Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    6.         '' initialize here
    7.         ComponentItems = New ToolStripMenuItem() { _
    8.                         ToolStripMenuItem3, ToolStripMenuItem4, ToolStripMenuItem5, ToolStripMenuItem6, _
    9.                         ToolStripMenuItem7, ToolStripMenuItem8, ToolStripMenuItem10, ToolStripMenuItem11, _
    10.                         ToolStripMenuItem12, ToolStripMenuItem13, ToolStripMenuItem14, ToolStripMenuItem15, _
    11.                         ToolStripMenuItem16, ToolStripMenuItem18, ToolStripMenuItem19, ToolStripMenuItem20, _
    12.                         ToolStripMenuItem21, ToolStripMenuItem23, ToolStripMenuItem24, ToolStripMenuItem26, _
    13.                         ToolStripMenuItem27, ToolStripMenuItem28, ToolStripMenuItem29, ToolStripMenuItem30, _
    14.                         ToolStripMenuItem31, ToolStripMenuItem33, ToolStripMenuItem34, ToolStripMenuItem36, _
    15.                         ToolStripMenuItem37, ToolStripMenuItem38, ToolStripMenuItem40, ToolStripMenuItem41, _
    16.                         ToolStripMenuItem43, ToolStripMenuItem44, ToolStripMenuItem46, ToolStripMenuItem47, _
    17.                         ToolStripMenuItem48, ToolStripMenuItem49, ToolStripMenuItem50, ToolStripMenuItem52, _
    18.                         ToolStripMenuItem53, ToolStripMenuItem55, ToolStripMenuItem56, ToolStripMenuItem57, _
    19.                         ToolStripMenuItem58, ToolStripMenuItem59}
    20.  
    21.         '' now it can be used
    22.         For Each compitem As ToolStripMenuItem In ComponentItems
    23.             AddHandler compitem.Click, AddressOf CompMenuItem_Click
    24.         Next
    25.     End Sub
    26. End Class
    Pradeep, Microsoft MVP (Visual Basic)
    Please appreciate posts that have helped you by clicking icon on the left of the post.
    "A problem well stated is a problem half solved." — Charles F. Kettering

    Read articles on My Blog101 LINQ SamplesJSON ValidatorXML Schema Validator"How Do I" videos on MSDNVB.NET and C# ComparisonGood Coding PracticesVBForums Reputation SaverString EnumSuper Simple Tetris Game


    (2010-2013)
    NB: I do not answer coding questions via PM. If you want my help, then make a post and PM me it's link. If I can help, trust me I will...

  4. #4

    Thread Starter
    Fanatic Member
    Join Date
    Jul 2009
    Posts
    629

    Re: Probably obvious yet weird error with a ToolStripMenuItem

    Ahhh thanks!

    Another thing learned. I did know those variables were declared before the generation of controls, but I thought the items were already referenced.
    I'll remember not to add "designer made linked control variables" in the form class in the future.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width