Thomas13012
Messages postés35Date d'inscriptionsamedi 12 septembre 2015StatutMembreDernière intervention 8 octobre 2016
-
25 sept. 2015 à 17:31
Thomas13012
Messages postés35Date d'inscriptionsamedi 12 septembre 2015StatutMembreDernière intervention 8 octobre 2016
-
27 sept. 2015 à 12:41
Bonjour,
Je reviens pour un problème de menu similaire à celui que j'avais déjà posé.
Pouvez-vous me donner un équivalent VB.Net simple du code suivant VB6 ?
La propriété Index ayant disparu sous VB.Net 2013.
'Le menu "mnuItems" est créer avec le créateur de menus sous VB6, 'en disposant de la propriété Index = 0. mnuItems(0).Caption = "Item 0" Dim i As Integer, NbItems A Integer NbItems = 5 For i = 1 to NbItems - 1 'Chargement de nouveaux items du menu. Load mnuItems(i) mnuItems(i).Caption = "Item" & Str$(i) mnuItems(i).Checked = True Next i
Thomas13012
Messages postés35Date d'inscriptionsamedi 12 septembre 2015StatutMembreDernière intervention 8 octobre 20161 25 sept. 2015 à 18:28
Non pas vraiment.
Notamment, quand je cherche à obtenir un code unique pour un menu indexé qui peut régir suivant la valeur de l'index. Notamment dans l'événement "mnuItems_Click(Index As Integer)".
Je cherchais une approche comparable à celle de l'exemple VB6
que j'ai soumis plus haut.
Whismeril
Messages postés19026Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention20 avril 2024656 26 sept. 2015 à 07:36
Bonjour quand tu ajoutes un événement à un contrôle, dans la signature de la méthode il y a un objet sender.
Cet objet est le contrôle qui génère l'événement.
Pour t'en servir efficacement, tu dois le caster dans le type de contrôle qu'il est réellement.
A partir de là tu as accès à toutes les infos du menu cliqué.
En pratique, l'index ne sert plus dans la grande majorité des cas.
Et dans les quelques cas ou tu ne sais pas faire autrement, tu peux te servir de la propriété Name ou Tag (objet dans lequel tu peux mettre n'importe quel info) ou encore rechercher l'index du contrôle dans la collection de contrôles qui l'englobe.
Private Sub testMenuToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim monMenu As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
monMenu.Checked = True 'là j'agis directement sur la propriété
monMenu.Text = "Menu " & monMenu.Tag.ToString() ' là je prends l'info dans le tag
Dim index As Integer = fichierToolStripMenuItem.DropDownItems.IndexOf(monMenu) ' et là j'obtiens l'index de mon menu dans la collection qui l'englobe
End Sub
Je truc c'est qu'il ne faut pas appliquer la même logique qu'en VB6, il faut penser objet.
Thomas13012
Messages postés35Date d'inscriptionsamedi 12 septembre 2015StatutMembreDernière intervention 8 octobre 20161 27 sept. 2015 à 12:41
Merci pour votre réponse.
Je vais m'engager dans cette direction.
Jusqu'à présent, je négligeais la partie objet de l'interface en me focalisant sur l'algorithmique des intentions du code associé à l'interface.