domingoninja
Messages postés7Date d'inscriptionmardi 10 avril 2007StatutMembreDernière intervention10 février 2009
-
12 déc. 2008 à 13:11
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 2011
-
12 déc. 2008 à 20:14
Bonjour,
Un truc que je savais bien faire en vb6, quand ce n'était pas encore MenuStrip, mais avec lequel j'ai du mal avec vb.net :
J'ai une form avec un MenuStrip et un ToolStrip en dessous.
Dans le MenuStrip, j'ai (par exemple) :
- Fiche
-- Suivante -- Tag = "SUIV"
-- Précédente -- Tag = "PREC"
-- Enregistrer -- Tag = "ENREG"
-- Quitter -- Tag = "QUIT"
Dans le ToolStrip positionnée sous le MenuStrip j'ai des icônes (de raccourci) qui reprennent certaines fonctions de mon MenuStrip :
- Image 'Flèche droite' (Suivante) -- Tag = "SUIV"
- Image 'Flèche gauche' (Précédente) -- Tag = "PREC"
- Image 'Disquette' (Enregistrer) -- Tag = "ENREG"
J'aimerais intercepter, via un évènement du genre 'OnItemClick', la valeur du Tag du choix effectué par l'utilisateur DANS LA MEME PROCEDURE EVENEMENTIELLE.
Celà est-il possible ?
Comment ? (c'est mieux)
En attendant vos milliards d'idées ...
(Et de solutions ...)
domingoninja
Messages postés7Date d'inscriptionmardi 10 avril 2007StatutMembreDernière intervention10 février 2009 12 déc. 2008 à 19:19
Salut et encore merci à Fauve et Radcur pour leur aide ...
J'ai trouvé comment faire.
La solution de Radcur est bonne (ou presque) mais elle oblige d'énumérer tous les ToolStrip et MenuStrip existants.
En fait, il suffit de créer (ex: ToolStrip_et_MenuStrip_ItemClicked) et d'affecter soi-même la procédure d'évènement (AddHandler pour la ToolStripItemCollection complète du MenuStrip par boucle s'appelant elle-même (déjà traité sur le forum), et AddHandler pour tous les ToolStrip.Items).
Genre :
Private Sub ToolStrip_et_MenuStrip_ItemClicked(Byval sender as Object, Byval e as System.EventArgs)
Select Case CType(sender, Object).Tag
Case "SUIV"
'Traitement
Case "PREC"
'Traitement
Case ...
End Select
End Sub
Merci à ceux qui se sont intéressé à mon problème...
Si vous avez des commentaires ou des corrections ou critiques à formuler, n'hésitez pas !
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 12 déc. 2008 à 20:14
Salut,
La seule solution est que ton MenuStrip doit être dynamiquement, voici un code tout prêt pour toi :
Explication syntaxe fonction
creation_sous_menu :
creation_sous_menu(ByVal Menu As MenuStrip, ByVal IndexMenu As Integer, ByVal SubMenu As String(), ByVal TagText As String())
> Menu : Doit être un MenuStrip
> IndexMenu : Correspond à l'index du menu où ajouter les sous menus (Exemple : le menu Fiche a pour index 0 car c'est le premier)
Si tu crée un autre menu à coté, il aura pour index 1
> SubMenu : Contient le texte à afficher pour les sous menus
> TagText : Contient les tags associé au sous menus
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Déclaration d'un MenuStrip
Dim MainMenu As New MenuStrip
' Ajout de ce MenuStrip dans le Formulaire
Me.Controls.Add(MainMenu)
' Ajout du menu Fiche
MainMenu.Items.Add("Fiche")
' Défini les sous menus du menu Fiche
Dim MenuSubItems() As String = {"Suivante", "Précédente", "Enregistrer", "Quitter"}
' Défini les Tags associés au sous menu
Dim TagText() As String = {"SUIV", "PREC", "ENREG", "QUIT"}
'Fonction créant les sous menus
creation_sous_menu(MainMenu, 0, MenuSubItems, TagText)
End Sub
Sub creation_sous_menu(ByVal Menu As MenuStrip, ByVal IndexMenu As Integer, ByVal SubMenu As String(), ByVal TagText As String())
'Déclaration d'un ContextMenuStrip
Dim cms As New ContextMenuStrip
' Parcoure tous les sous menus souhaitant être crées
For nb As Integer = 0 To SubMenu.Count - 1
' Ajout du sous menu en cours dans le ContextMenuStrip
cms.Items.Add(SubMenu(nb))
' Défini le tag du sous menu en cours
cms.Items(cms.Items.Count - 1).Tag = TagText(nb)
' Ajout d'un évènement clic pour le sous menu en cours
' La fonction exécuté lors du clic sera SubItemsMenu
' A cause de la boucle For, un clic sur n'importe quel sous menu
' sera exécuté par une seule et unique fonction qui est SubItemsMenu
AddHandler cms.Items(cms.Items.Count - 1).Click, AddressOf SubItemsMenu
Next
' Les deux dernières lignes de codes ajoutent les sous menus au menu Fiche
Dim tsi As ToolStripMenuItem = CType(Menu.Items(IndexMenu), ToolStripMenuItem)
tsi.DropDown = cms
End Sub
Sub SubItemsMenu(ByVal sender As System.Object, ByVal e As System.EventArgs)
' sender correspondra au sous menu cliqué
MsgBox(sender.Tag)
End Sub
End Class
Note : J'espère que c'est ce que tu cherchais. Si tu as des questions, n'hésites pas
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 12 déc. 2008 à 14:02
Salut,
Si ton MenuStrip et ton ToolStrip sont crée à partir de la Boite
à Outils, en double cliquant
sur un item du ToolStrip, tu feras apparaitre une procédure évènementielle (celle associé au clic de l'item en question)
Il faut que tu utilises la variable sender qui correspond à l'item cliqué. Ainsi en faisant sender.Tag, tu obtiens le Tag de l'item cliqué.
J'espère que c'est cà que tu veux savoir car je n'ai pas vraiment bien compris ce que tu veux faire. Si c'est pas le cas, peux tu expliquer ton problème de manière plus claire Merci
domingoninja
Messages postés7Date d'inscriptionmardi 10 avril 2007StatutMembreDernière intervention10 février 2009 12 déc. 2008 à 17:33
Merci à toi Fauve pour ta tentative d'aide ...
Mais :
- Pour ToolStrip et MenuStrip :
La procédure évènementielle générée par vb.net lorsqu'on double-clique sur un item est du type 'Item.click'. Dans ce cas, on connaît exactement l'élément qui a été choisi par l'utilisateur (puisque c'est cet item précis qui a déclenché l'évènement).
Exemple :
Private Sub ToolStrip_Item1_Click(Byval sender as System.Object, Byval e as System.EventArgs) Handles ToollStrip_Item1.Click
'L'élément choisi est Item1
End Sub
- Pour ToolStrip :
On peut utiliser la procédure évènementielle 'ToolStrip.ItemClicked' (évènement click sur le ToolStrip) et tester la valeur de e.ClickedItem.Tag pour savoir quel item a été choisi (cette solution est déjà meilleure ... je trouve ...).
Exemple :
Private Sub ToolStrip_ItemClicked(Byval sender as System.Object, Byval e as System.EventArgs) Handles ToolStrip.ItemClicked
Select Case e.ClickedItem.Tag
Case "SUIV"
'Traitement pour Tag="SUIV"
Case "PREC"
'Traitement pour Tag="PREC"
Case ...
End Select
End Sub
J'aurais souhaité utiliser la même procédure que ci-dessus pour gérer le click sur un item de mon MenuStrip. Malheureusement l'évènement 'ItemClicked' de MenuStrip ne se déclenche que lorsqu'on sélectionne un choix du premier menu (Fiche) et non les choix sous-jacents (Suivant, Précédent etc ...).
Le but est de ne pas avoir autant de procédures évènementielles qu'il y a de choix au menu, et de gérer dans la même procédure n'importe quel choix de l'utilisateur, qu'il soit fait par MenuStrip, ou par ToolStrip.
Est-ce plus clair depuis mes explications ? N'hésitez pas à m'en demander d'autres si je suis encore trop confus ...
Merci pour vos réponses
Dom.
Vous n’avez pas trouvé la réponse que vous recherchez ?
radcur
Messages postés282Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention15 août 20122 12 déc. 2008 à 18:35
salut
je n'ai pas la possibilité de le tester en ce moment mais il est possible de regrouper plusieurs évènements sous une seul sub pour plusieurs objets du même type (exemple les ToolStripMenuItem)
private sub MenuItemClick(Byval sender as System.Object, Byval e as System.EventArgs) Handles ToolStripFiche.ItemClicked, ToolStripSuivant.itemclicked, tous les ToolStripMenuItem de ton menu...
'tu travailles ensuite avec les parametres pour récupérer l'item du menu qui a cliqué
end sub