Remplir un MenuStrip dynamiquement [Résolu]

Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 4 déc. 2016 à 22:03 - Dernière réponse : Whismeril 11402 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention
- 15 avril 2018 à 12:41
Bonsoir,
J'ai un MenuStrip est je veux le remplir dynamiquement (Créer des items (ToolStripMenuItem))
je n'ai pas trouvé sur le net ce que je veux et j'avais la méthode pour créer et remplir un TabControl dynamiquement, ce n'été pas difficile d'utiliser cette méthode pour le MenuStrip, voici le code :
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TypesToolStripMenuItem As New ToolStripMenuItem()
TypesToolStripMenuItem.Name = "Type1"
TypesToolStripMenuItem.Text = "Type 1"
TypesToolStripMenuItem.Font = New Font("Georgia", 12)
MenuStrip1.Items.Add(TypesToolStripMenuItem)
AddHandler TypesToolStripMenuItem.Click, AddressOf TypesToolStripMenuItem_Click
End Sub
Private Sub TypesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

j'arrive a créer un ToolStripMenuItem et lui attribuer une action qui va être exécuté si je clique sur lui
mais si je veux créer plusieurs (le nombre n'est pas définie), comment attribuer des actions à chaque item ?
merci pour vos réponses futures et bonne soirée
Afficher la suite 

28 réponses

Répondre au sujet
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 4 déc. 2016 à 22:26
+1
Utile
3
Bonjour,

Voici un exemple avec 1 button:

Public Class Form1
    Dim monmenu As New MenuStrip

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        'ajout d'un élément
        Dim menuitem As New ToolStripMenuItem
        menuitem.Text = "Fichier"

        'ajout d'un sous-élément
        Dim itemOuvrir As New ToolStripMenuItem
        itemOuvrir.Text = "Ouvrir"
        itemOuvrir.Tag = "0"
        'abonnement à l'événement click
        AddHandler itemOuvrir.Click, AddressOf item_Click
        menuitem.DropDownItems.Add(itemOuvrir)

        'ajout d'un sous-élément
        Dim itemEnregistrer As New ToolStripMenuItem
        itemEnregistrer.Text = "Enregistrer"
        itemEnregistrer.Tag = "1"
        'abonnement à l'événement click
        AddHandler itemEnregistrer.Click, AddressOf item_Click
        menuitem.DropDownItems.Add(itemEnregistrer)

        'ajout d'un autre sous-élément
        Dim itemQuitter As New ToolStripMenuItem
        itemQuitter.Text = "Quitter"
        itemQuitter.Tag = "2"
        'abonnement à l'événement click
        AddHandler itemQuitter.Click, AddressOf item_Click
        menuitem.DropDownItems.Add(itemQuitter)

        'ajout de l'élément au menustrip
        monmenu.Items.Add(menuitem)

        'ajout du menustrip au formulaire
        Me.Controls.Add(monmenu)
    End Sub
    Private Sub item_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim monitem As ToolStripItem = DirectCast(sender, ToolStripItem)
        MessageBox.Show(monitem.Text)
        CType(monmenu.Items(0), ToolStripMenuItem).DropDownItems(1).AllowDrop = True
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim c As ToolStripMenuItem
        c = CType(CType(monmenu.Items(0), ToolStripMenuItem).DropDownItems.Add("Nouveau menu"), ToolStripMenuItem)
        c.Name = "Nouveau menu"
        For lcoount As Integer = 1 To 2
            Dim innerItem As New ToolStripMenuItem()
            innerItem.Text = "Monmenu" & lcoount
            innerItem.Name = lcoount.ToString
            'abonnement à l'événement click
            AddHandler innerItem.Click, AddressOf item_Click
            c.DropDownItems.Add(innerItem)
        Next
        ' CType(monmenu.Items(0), ToolStripMenuItem).DropDownItems(1).Visible = False
    End Sub
End Class


a toi de l'adapter suivant tes besoins
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 4 déc. 2016 à 22:55
Bonsoir cs_Le Pivert,
Merci c'est ce que je voulais et en plus c'est très bien expliqué, sérieux tu m'enlève une épine du pied.
si je veux qu'il affiche le contenue d'une ListBox par exemple (je précise que le nombre des items de la ListBox est le même que celui du Menustrip
et aussi je veux par exemple si je supprimer un item de la ListBox le ToolStripMenuItem lié a ce item (item de la ListBox ) sera aussi supprimer
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 5 déc. 2016 à 08:48
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 5 déc. 2016 à 10:01
Salut cs_Le Pivert
Merci
je vais jeter un œil au lien que tu m'a donné merci
Commenter la réponse de cs_Le Pivert
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - Modifié par cs_JMO le 4/12/2016 à 22:43
0
Utile
4
Bonsoir

Regarde du côté AddHandler

Exemple:
 Dim menustripmain As New MenuStrip
 Dim menustripmain_itemmenu As New ToolStripMenuItem
 Dim menustripmain_itemviewappweb As ToolStripMenuItem

 ' Création dynamique du menu et de son arborescence
 menustripmain_itemmenu.Text = "Menu"
 menustripmain_itemmenu.Font = New System.Drawing.Font("Segoe UI", 10.0!)

 ' Création du menu "Consultation Web Consignes"
 menustripmain_itemviewappweb = CType(CType(menustripmain_itemmenu, ToolStripMenuItem).DropDownItems.Add("Consultation Web Consignes"), ToolStripMenuItem)
 menustripmain_itemviewappweb.Name = "ViewWEB"
 menustripmain_itemviewappweb.Text = "Consultation Web Consignes"
 AddHandler menustripmain_itemviewappweb.Click, AddressOf ToolStripSplitButtonOpenLinkWeb_ButtonClick

 ' Ajout des éléments au menustrip Menu
  menustripmain.Items.Add(menustripmain_itemmenu)

 ' Ajout du menustripmain au formulaire
 Me.Controls.Add(menustripmain)


 '#####################################################################################
 '# ToolStripSplitButtonOpenLinkWeb pour ouvrir le lien Web des Consignes
 '#####################################################################################
 Private Sub ToolStripSplitButtonOpenLinkWeb_ButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles toolStripSplitButtonOpenLinkWeb.ButtonClick
     Process.Start("http://......")
 End Sub

jean-marc

Désolé cs_Le Pivert (bonsoir) je n'avais pas vu ta proposition.
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 4 déc. 2016 à 23:02
Bonsoir cs_JMO,
Merci de m'avoir répondu
je ne sais pas si j'ai bien compris mais je crois que le problème de ce code est que les deux ToolStripMenuItem ont la même action, non?
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 4 déc. 2016 à 23:08
Bonsoir Karin,

Non, j'ai copié/collé des bouts d'une appli où je créé un menu, puis des items et subtitems.
Le code proposé par Le Pivert est plus explicite que le mien !

        ' Ajout d'un élément au menustrip
menustripmain_itemreload.Name = "Reload"
menustripmain_itemreload.Text = "Relancer"
menustripmain_itemreload.Font = New System.Drawing.Font("Segoe UI", 10.0!)
menustripmain.Items.Add(menustripmain_itemreload)
' Abonnement à l'événement click
AddHandler menustripmain_itemreload.Click, AddressOf MenuMain_Item_Click

' Ajout d'un élément au menustrip
menustripmain_itemexit.Name = "Quitter"
menustripmain_itemexit.Text = "Quitter"
menustripmain_itemexit.Font = New System.Drawing.Font("Segoe UI", 10.0!)
menustripmain.Items.Add(menustripmain_itemexit)
' Abonnement à l'événement click
AddHandler menustripmain_itemexit.Click, AddressOf MenuMain_Item_Click
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 4 déc. 2016 à 23:48
Bonsoir cs_JMO,
l'essentiel pour moi est que tu à essayer de m'aider, ça me fait plaisir merci
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 5 déc. 2016 à 09:39
Pas de problème, plus on est de fous plus on rit
LOL

Ce message s'adresse à cs_JMO, avec leur systeme on ne voit pas à qui l'on s'adresse!

@+ Le Pivert
Commenter la réponse de cs_JMO
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 4 déc. 2016 à 22:51
0
Utile
3
bonsoir Karin.code
Suffit de leur donner à chacun un nom différent

De plus attention

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim TypesToolStripMenuItem As New ToolStripMenuItem() ' point 1
TypesToolStripMenuItem.Name = "Type1"
TypesToolStripMenuItem.Text = "Type 1"
TypesToolStripMenuItem.Font = New Font("Georgia", 12)
MenuStrip1.Items.Add(TypesToolStripMenuItem)
AddHandler TypesToolStripMenuItem.Click, AddressOf TypesToolStripMenuItem_Click ' point 2
End Sub


1) Tu appelles ta commande de menu avec un nom presque similaire au type menu : risque de se perdre les pinceaux ( j'ai failli me tromper d'ailleurs) . Là c'est toi qui donne le nom : autant lui donner un nom en français c'est plus parlant ( regarde mon exemple)
2) Le "AddHandler" est incorrect
- le premier paramètre est l'action sur le contrôle
- le second paramètre est une simple Sub que le programme va exécuter une fois l'évènement déclenché

tu devrais faire
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ElementMenu As New ToolStripMenuItem() ' nouveau élément menu
ElementMenu.Name = "Enregistrer"
ElementMenu.Text = "Enregistrer"
ElementMenu.Font = New Font("Georgia", 12)
MenuStrip1.Items.Add(ElementMenu)
AddHandler Enregistrer.Click, AddressOf Enregistrement ' adresse Sub à lier à cet évènement

Dim ElementMenu As New ToolStripMenuItem() ' nouveau élément menu
ElementMenu.Name = "Fermer"
ElementMenu.Text = "Fermer"
ElementMenu.Font = New Font("Georgia", 12)
MenuStrip1.Items.Add(ElementMenu)
AddHandler Fermer.Click, AddressOf Fermeture ' adresse Sub à lier à cet évènement
End Sub

Private Sub Enregistrement()
' le code d'enregistrement
End Sub

Private Sub Fermeture()
' le code pour fermer
End Sub
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 4 déc. 2016 à 23:06
Bonsoir vb95
Merci de m'avoir répondu
Je crois que tu m'a mal compris, je ne connais pas le nombre de ToolStripMenuItem que je vais créer (Par exemple Type 1, Type 2, Type 3, Type 4 ...etc)
avec ton code je peux créer que deux, non?
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 4 déc. 2016 à 23:15
bonsoir Karin.code
Là j'en ai mis deux
Mais libre à toi d'en mettre 20 ou 30 ou 200 ( mais alors là le clavier va chauffer)
Ou alors passer par un tableau contenant les caractéristiques de chaque élément du menu et avec une boucle créer tous les menus d'un coup
En plus que vient faire la listbox dont tu parles ? Surtout qu'elle aura toujours le même nombre d'éléments que ton menu
Et si c'était la listbox qui servait de "menu" ?
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 4 déc. 2016 à 23:45
Bonsoir vb95
Désolé si je n'ai pas expliquer mon projet
en faite je fais des calculs et si le résultat égale a une certaine valeur, par exemple
si :
Résultat égale 0,5 -> état : Faible
Résultat égale 1,5 -> état : Moyenne ( pas encore prés)
Résultat égale 2,5 -> état : Bien (l'échantillon acceptable)
Résultat égale 5,5 -> état : Très bien (C'est le bon échantillon )
...etc
si je lance le premier calcul et le résultat est égal à 0,5
le string (état : Faible) sera enregistrer dans la ListBox, en même temps un ToolStripMenuItem sera crée dans le MenuStrip avec un nom "Type 1", si je clique dessus un message s'affiche avec le contenu de l'Items(0) de la ListBox

si je lance le premier calcul et le résultat est égal à 2,5
le string (état : Bien (l'échantillon acceptable)) sera enregistrer dans la ListBox, en même temps un ToolStripMenuItem sera crée dans le MenuStrip avec un nom "Type 2", si je clique dessus un message s'affiche avec le contenu de l'Items(1) de la ListBox
ainsi de suite
j'utilise la ListBox pour sauvegarder les résultats, je ne peut pas faire MessageBox.Show(Résultat) car le résultat change a chaque calcul
Commenter la réponse de vb95
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - Modifié par vb95 le 5/12/2016 à 00:23
0
Utile
2
Salut Karin.code
Si je comprends bien tu fais X calculs ( cela peut être 20 comme 200)
A chaque calcul correspond
- un numéro ( Calcul n° 1, Calcul n°2, etc ......
- un résultat qui est une valeur numérique
- une appréciation qui est une chaine de caractères


somme toute un tableau comme ceci
chaque fois que tu fais un calcul on ajoute une ligne

Cela me paraît plus simple que tes menus et listbox
tout en sachant que sur une ligne tu peux afficher d'autres informations ou même effacer la ligne
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 5 déc. 2016 à 08:32
Salut vb95,

merci pour la proposition
en faite j'ai déjà pensé a ce choix, c'est vrais que c'est plus facile et plus pratique d'utiliser un tableau, mais pour ce projet j'ai vraiment envie d'utiliser un MenuStrip.
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 5 déc. 2016 à 12:19
Soit
Mais ce n'est nullement la finalité d'un MenuStrip
Commenter la réponse de vb95
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - Modifié par Karin.code le 5/12/2016 à 09:59
0
Utile
Bonjour
j'ai fait quelque recherche ce matin et la 1er solution que j'ai trouvé (je l'ai intégré au code de cs_Le Pivert) est :
Public Class Form1
Dim monmenu As New MenuStrip
Dim i As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'ajout d'un élément
Dim menuitem As New ToolStripMenuItem
menuitem.Text = "Fichier"
'ajout d'un sous-élément
Dim itemOuvrir As New ToolStripMenuItem
itemOuvrir.Text = "Ouvrir"
itemOuvrir.Tag = "0"
'abonnement à l'événement click
AddHandler itemOuvrir.Click, AddressOf item_Click
menuitem.DropDownItems.Add(itemOuvrir)
'ajout d'un sous-élément
Dim itemEnregistrer As New ToolStripMenuItem
itemEnregistrer.Text = "Enregistrer"
itemEnregistrer.Tag = "1"
'abonnement à l'événement click
AddHandler itemEnregistrer.Click, AddressOf item_Click
menuitem.DropDownItems.Add(itemEnregistrer)
'ajout d'un autre sous-élément
Dim itemQuitter As New ToolStripMenuItem
itemQuitter.Text = "Quitter"
itemQuitter.Tag = "2"
'abonnement à l'événement click
AddHandler itemQuitter.Click, AddressOf item_Click
menuitem.DropDownItems.Add(itemQuitter)
'ajout de l'élément au menustrip
monmenu.Items.Add(menuitem)
'ajout du menustrip au formulaire
Me.Controls.Add(monmenu)
End Sub
Private Sub item_Click(ByVal sender As Object, ByVal e As EventArgs)
ListBox1.SelectedIndex = MenuStrip1.Items.IndexOf(DirectCast(sender, ToolStripItem))
MessageBox.Show(ListBox1.SelectedItem)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim element As New ToolStripMenuItem()
element.Name = "element" & i
element.Text = "element " & i
AddHandler element.Click, AddressOf item_Click
monmenu.Items.Add(element)
i = i + 1
End Sub
End Class

quand je clique sur le 1er élément ça affiche l'item (1) de la ListBox
quand je clique sur le 2eme élément ça affiche l'item (2) de la ListBox
ainsi de suite
mais le problème est que :
quand je clique sur un sous élément rien ne s'affiche
la 2eme solution que j'ai trouvé est :
Public Class Form1
Dim monmenu As New MenuStrip
Dim i As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'ajout d'un élément
Dim menuitem As New ToolStripMenuItem
menuitem.Text = "Fichier"
'ajout d'un sous-élément
Dim itemOuvrir As New ToolStripMenuItem
itemOuvrir.Text = "Ouvrir"
itemOuvrir.Tag = "0"
'abonnement à l'événement click
AddHandler itemOuvrir.Click, AddressOf item_Click
menuitem.DropDownItems.Add(itemOuvrir)
'ajout d'un sous-élément
Dim itemEnregistrer As New ToolStripMenuItem
itemEnregistrer.Text = "Enregistrer"
itemEnregistrer.Tag = "1"
'abonnement à l'événement click
AddHandler itemEnregistrer.Click, AddressOf item_Click
menuitem.DropDownItems.Add(itemEnregistrer)
'ajout d'un autre sous-élément
Dim itemQuitter As New ToolStripMenuItem
itemQuitter.Text = "Quitter"
itemQuitter.Tag = "2"
'abonnement à l'événement click
AddHandler itemQuitter.Click, AddressOf item_Click
menuitem.DropDownItems.Add(itemQuitter)
'ajout de l'élément au menustrip
monmenu.Items.Add(menuitem)
Me.Controls.Add(monmenu)
End Sub
Private Sub item_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim item As ToolStripItem = sender
ListBox1.SelectedIndex = item.Owner.Items.IndexOf(item)
MessageBox.Show(ListBox1.SelectedItem)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim element As New ToolStripMenuItem()
element.Name = "element" & i
element.Text = "element " & i
AddHandler element.Click, AddressOf item_Click
monmenu.Items.Add(element)
i = i + 1
End Sub
End Class

cette méthode fonction pour les éléments et sous éléments
supposant qu'il y a 5 éléments et dans le 3eme élément il y a 4 sous éléments
quand je clique sur le 1er élément ça affiche l'item (1) de la ListBox
quand je clique sur le 2eme élément ça affiche 'item (2) de la ListBox
quand je clique le 1er sous élément du 3eme élément ça affiche l'item (1) de la ListBox
quand je clique le 2eme sous élément du 3eme élément ça affiche l'item (2) de la ListBox
ainsi de suite
ce n'est pas ce que je veux, moi je veux que ça s'affiche par ordre de création c-à-dire :
le 1er élément du MenuStrips affiche l'item (1) de la ListBox
le 2eme élément du MenuStrips affiche l'item (2) de la ListBox
le 1er sous élément du 3eme élément du MenuStrips affiche l'item (3) de la ListBox
le 2eme sous élément du 3eme élément du MenuStrips affiche l'item (4) de la ListBox
le 3eme sous élément du 3eme élément du MenuStrips affiche l'item (5) de la ListBox
le 4eme sous élément du 3eme élément du MenuStrips affiche l'item (6) de la ListBox
le 4eme élément du MenuStrips affiche l'item (4) de la ListBox
le 5eme élément du MenuStrips affiche l'item (5) de la ListBox
je sais que je demande beaucoup, mais je fais des recherches de mon côté, je n'attend pas que la solution vient par magie
Je vais continuer à rechercher d'autre solution
merci pour votre aide
Commenter la réponse de Karin.code
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - Modifié par cs_Le Pivert le 5/12/2016 à 11:38
0
Utile
Essaie ceci:


 Private Sub item_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim index As Integer
        index = monmenu.Items.IndexOf(DirectCast(sender, ToolStripItem))
        ListBox1.SelectedIndex = index - 1
        MessageBox.Show(CStr(ListBox1.SelectedItem)) 'nom
        MessageBox.Show(CStr(ListBox1.SelectedIndex)) 'index
    End Sub
    Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim element As New ToolStripMenuItem()
        element.Name = "element" & i
        element.Text = "element " & i
        AddHandler element.Click, AddressOf item_Click
        monmenu.Items.Add(element)
        ListBox1.Items.Add(element.Text)
        i = i + 1
    End Sub


apprends toi a mettre
Option Strict On
et
Option Explicit On
pour corriger les erreurs
@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 5 déc. 2016 à 12:27
0
Utile
6
Salut cs_Le Pivert,

C'est déjà un problème réglé Merci
désolé je n'ai pas expliquer pourquoi je veux les sous éléments

Comme le montre l'image si je crée beaucoup d'éléments certain d'entre eux ne s'affiche pas car la taille du MenuStrip est limité
je voulais s'avoir si c'est possiblede faire quelque chose comme ça

si les élements ne peuvent plus être affiché alors il seront créé dans un sous menu ou quelque chose comme ça
cet aspect là est présent dans beaucoup de logiciel (par exemple Microsoft, des navigateur , même dans visual basic express 2010)
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention > vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 5 déc. 2016 à 15:18
Et pour compléter ce qu'a dit VB95 que je salue. Le but de la programmation c'est de faire un programme le plus simple possible dans la mesure du cahier des charges. Comme le dit si souvent ucfoutu, cela commence avec un papier et un crayon.
Pourquoi faire compliqué quand on peut faire simple!!!
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention > cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 5 déc. 2016 à 16:57
Bonjour cs_Le Pivert
Je plussoie ton complément
Sans phase d'analyse on va droit dans le mur !
Salutations à toi
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 5 déc. 2016 à 19:16
Salut cs_Le Pivert et vb95
je sais ça parait insensé, mais j'aurais bien aimé utiliser un MenuStrip comme je l'ai mentionné plus haut
http://codes-sources.commentcamarche.net/forum/affich-10071611-remplir-un-menustrip-dynamiquement#20
ma form est déjà surchargé (il y a beaucoup de contrôle), je voulais éviter d'utiliser plus de contrôle et éviter d'agrandir la form plus qu'elle est déjà, je vais essayer de faire avec et utiliser une ListView comme l'a suggéré vb95
http://codes-sources.commentcamarche.net/forum/affich-10071611-remplir-un-menustrip-dynamiquement#12
Merci beaucoup à tous ceux qui m'ont aidé
vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention > Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention - 5 déc. 2016 à 21:08
Salut Karin.code
tu as écrit : "je sais ça parait insensé, mais j'aurais bien aimé utiliser un MenuStrip comme je l'ai mentionné plus haut "
Le problème c'est qu'un MenuStrip n'est pas fait pour cela !
C'est un peu comme si tu voulais enfoncer un clou avec une aiguille à tricoter !
si tu penses que ce post peut être fermé fais-le !
Ouvre un nouveau sujet de discussion si tu as une difficulté avec le passage de ton projet avec une listview
Karin.code 183 Messages postés vendredi 2 septembre 2016Date d'inscription 16 janvier 2018 Dernière intervention > vb95 1501 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 5 déc. 2016 à 23:18
Merci encore pour votre aide
si j'ai des difficultés avec la Listview j'ouvrirai un nouveau sujet de discussion
je te souhaite une bonne nuit
Commenter la réponse de Karin.code
0
Utile
2
Bonjour cs_Le Pivert, j'ai un problème de compréhension fondamental au sujet des objets. Le code de la ligne
c = CType(CType(monmenu.Items(0), ToolStripMenuItem).DropDownItems.Add("Nouveau menu"), ToolStripMenuItem)
contient une conversion de monmenu.Items(0) à ToolStripMenuItem.

Avec un breakpoint immédiatement après la ligne ci-dessus j'obtiens dans l'Immediate Window:

?monmenu.Items(0).gettype.tostring
"System.Windows.Forms.ToolStripMenuItem"

Si monmenu.Items(0) est reconnu comme un ToolStripMenuItem pourquoi est-il nécessaire de faire la conversion?

Je ne conteste pas la validité de votre code (il fonctionne) mais j'aimerais comprendre.

merci
Whismeril 11402 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 15 avril 2018 à 10:12
Alors c'est pas la peine non plus de poster en double
http://codes-sources.commentcamarche.net/forum/affich-10084759-question-a-lepivert#3

Comme je te l'ai dit dans l'autre sujet, cela doit marcher sans les conversions.
As tu au moins essayé?

Je t'ai aussi demandé d'utilisation de la coloration syntaxique.
Whismeril 11402 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 15 avril 2018 à 12:41
Donc dans l'autre sujet tu dis
Pour ce qui est de ta réponse j'ai écrit dans la fenêtre immédiate
?monmenu.Items(0). et l'intellisence ne propose pas DropDownItems apres le point.


Avec le code complet, on voit que
monmenu est un MenuStrip cf message 1, ligne de code n°2
Dans la doc en ligne https://msdn.microsoft.com/fr-fr/library/system.windows.forms.menustrip(v=vs.110).aspx
On voit que Items est du type ToolStripItemCollection qui peut contenir tous les types dérivés de ToolStripItem, y compris ToolStripMenuItem.

Du coup, si tu places un ToolStripMenuItem, il est accepté car, un ToolStripMenuItem est un ToolStripItem, mais un ToolStripItem n'est pas un ToolStripMenuItem.
Donc quand tu prends l'Item 0, c'est un ToolStripItem, pour accéder aux propriétés spécifiques du ToolStripMenuItem, il faut le caster, c'est le rôle de l'intrusion CType.

Si tu ne comprends pas bien, cherche des cours sur l'héritage et le polymorphisme.
J'en ai écrit un
Commenter la réponse de paulc

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.