bounty_hunter
Messages postés7Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention28 février 2006
-
27 févr. 2006 à 12:19
Dalida
Messages postés6728Date d'inscriptionmardi 14 mai 2002StatutContributeurDernière intervention11 janvier 2016
-
27 févr. 2006 à 18:23
Bonjour,
Je travaille sur un programme où je charge dynamiquement un menu avec des enregistrements provenant d'un fichier Access
(par menu j'entends bien "MenuItem" et non pas menu déroulant)
Je voudrai créer des évenements sur ces objets mais vu qu'ils ont été créés dynamiquement
je ne sais pas comment les déclarer.
Je vous mets le code qui me sert à charger dynamiquement mon menu (c'est du bricolage )
Dim MyConnexion As New OleDb.OleDbConnection
MyConnexion.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
"data source= " & Application.StartupPath & "" & "bd.mdb;"
Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
Mycommand.CommandText = "SELECT distinct ( niveau ) from documents"
MyConnexion.Open()
Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
Dim str As String
Dim i As Integer
Do While myReader.Read()
str = myReader.GetString(0)
MenuItem7.MenuItems.Add(str)
MenuItem7.MenuItems.Item(i).MenuItems.Add("Documents d'application")
'Debut du chargement des docs d'app
Dim MyConnexion1 As New OleDb.OleDbConnection
MyConnexion1.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
"data source= " & Application.StartupPath & "" & "bd.mdb;"
Dim Mycommand1 As OleDbCommand = MyConnexion1.CreateCommand()
Mycommand1.CommandText = "SELECT nom_doc from documents where niveau='" & str & "' and type=1"
MyConnexion1.Open()
Dim myReader1 As OleDbDataReader = Mycommand1.ExecuteReader()
Dim str1 As String
Dim j As Integer = 0
Do While myReader1.Read()
str1 = myReader1.GetString(0)
MenuItem7.MenuItems.Item(i).MenuItems.Item(0).MenuItems.Add(str1.Substring(0, str1.Length - 4))
j = j + 1
Loop
If j = 0 Then
MenuItem7.MenuItems.Item(i).MenuItems.Item(0).Enabled = False
End If
myReader1.Close()
MyConnexion1.Close()
myReader.Close()
MyConnexion.Close()
Merci d'avance pour votre aide
A voir également:
[VB.NET] Comment gérer des évenements sur des objets créés dynamiquement ?
bounty_hunter
Messages postés7Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention28 février 2006 27 févr. 2006 à 13:46
Bon, alors, j'avoue, je suis pas malin... :)
Il m'a fallu du temps pour voir qu'il fallait mettre 2 "d" à AddressOf
Donc, merci c'est bon, ça fonctionne :)
je remets la partie de code que j'ai modifée pour que ca marche :
Dim str1 As String
Dim j As Integer = 0
Dim itm As MenuItem
Do While myReader1.Read()
str1 = myReader1.GetString(0)
str1 = str1.Substring(0, str1.Length - 4)
itm = New MenuItem(str1, New EventHandler(AddressOf MenuItems_OnClick))
MenuItem7.MenuItems.Item(i).MenuItems.Item(0).MenuItems.Add(itm)
j = j + 1
Loop
bounty_hunter
Messages postés7Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention28 février 2006 27 févr. 2006 à 18:21
En fait au départ lorsque je voyais que ça ne fonctionnait pas,
j'ai essayé d'approfondir le problème sur internet à partir des informations
que tu m'avais données...pour me rendre compte que l'erreur venait de moi.
Je ne connaissais pas l'opérateur "AddressOf".
J'ai donc fait des recherches sur son utilisation.
Je voulais préciser explicitement "New EventHandler()" d'après les exemples que j'avais vu sur le net.
Mais effectivement ce n'est pas nécessaire de le préciser.