Event Handler wird mehrmals nacheinander aufgerufen!

17/07/2009 - 15:40 von leslie eldrige | Report spam
Hallo Zusammen,

Ich passe mein ContextMenuStrip dynamisch an, wobei ich bereits einen
statischen Eintrag habe und einfach die Subitems aus der Datenbank hole. der
Code ist:

Dim mySubItem As New ToolStripMenuItem
mySubItem = Me.myCms.Items("myMenuItemName")
mySubItem.DropDownItems.Add(row("SubItems").ToString)
AddHandler mySubItem.DropDownItemClicked, AddressOf
myHandler_DropDownItemClicked

Soweit funktioniert alles. wenn ich also die Applikation starte, werden die
Subitems aus der Datenbank geholt und dem Menuitem hinzugefügt. Nun wenn ich
jetzt einen Subitem anklicke, dann wird meine Handlerfunktion
("myHandler_DropDownItemClicked") so oft nacheinander aufgerufen, so viel es
Subitems in der Liste gibt!

Technisch stört es in diesem Fall nicht besonderes, aber ich möchte es in
jedem Falle vermeiden, weil die Handlerfunktion entsprechende Update bzw.
Insert Commands zum SQL Server schickt. Also werden somit unnötig Netzwerk
und SQL Server belastet. Und natürlich es wird irgendwann mal einen Fall
geben, wo dies ein Problem sein wird und deswegen wüsste ich gerne wie man
diese Problematik vorbeugen kann.

Gibt es eine Möglichkeit dieses Problem zu lösen, bzw. was mache ich falsch?

Danke schon mal im voraus.

Grüsse
 

Lesen sie die antworten

#1 Thorsten Doerfler
17/07/2009 - 16:16 | Warnen spam
leslie eldrige schrieb:
Ich passe mein ContextMenuStrip dynamisch an, wobei ich bereits einen
statischen Eintrag habe und einfach die Subitems aus der Datenbank hole. der
Code ist:

Dim mySubItem As New ToolStripMenuItem
mySubItem = Me.myCms.Items("myMenuItemName")
mySubItem.DropDownItems.Add(row("SubItems").ToString)
AddHandler mySubItem.DropDownItemClicked, AddressOf
myHandler_DropDownItemClicked

Soweit funktioniert alles. wenn ich also die Applikation starte, werden die
Subitems aus der Datenbank geholt und dem Menuitem hinzugefügt. Nun wenn ich
jetzt einen Subitem anklicke, dann wird meine Handlerfunktion
("myHandler_DropDownItemClicked") so oft nacheinander aufgerufen, so viel es
Subitems in der Liste gibt!



Weil Du auch den Handler so oft hinzufügst, wie es Subitems in Deiner
Liste gibt. Dabei brauchst Du den mySubItem.DropDownItemClicked Handler
nur ein einziges Mal zuweisen, er wird automatisch bereits von jedem
hinzugefügten DropDownItem aufgerufen. Über die EventArgs des
DropDownItemClicked Ereignis, bekommst Du heraus, welcher DropDownItem
angeklickt wurde.

Anders sàhe es aus, wenn Du das ItemClick Ereignis des hinzugefügten
DropDownItem direkt erhalten wolltest. Aber das denke ich, ist hier
nicht erforderlich.

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen