|
-
Jul 5th, 2011, 09:00 AM
#1
Thread Starter
Fanatic Member
[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.
-
Jul 5th, 2011, 09:12 AM
#2
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:
Public Class Form1
Private ComponentItems() As ToolStripMenuItem
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ComponentItems = 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}
End Sub
End Class
- Coding Examples:
- Features:
- Online Games:
- Compiled Games:
-
Jul 5th, 2011, 09:12 AM
#3
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:
Public Class Form1 '' declare here Private ComponentItems() As ToolStripMenuItem Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '' initialize here ComponentItems = 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 it can be used For Each compitem As ToolStripMenuItem In ComponentItems AddHandler compitem.Click, AddressOf CompMenuItem_Click Next End Sub End Class
-
Jul 5th, 2011, 09:16 AM
#4
Thread Starter
Fanatic Member
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|