Contrôle MenuStrip - ToolStripMenuItem Quitter [Résolu]

cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
- 21 juil. 2015 à 20:12 - Dernière réponse : cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
- 22 juil. 2015 à 07:08
Bonsoir le Forum,

Je créé un MenuStrip dynamique
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Création contrôle MenuStrip
Dim menus As New MenuStrip()
Dim menu1 As New ToolStripMenuItem("Fichier")
Dim menu2 As New ToolStripMenuItem("Edition")

Dim smenu1_1 As New ToolStripMenuItem("Création Plan de Production")
Dim smenu1_2 As New ToolStripMenuItem("Export Plan de Production - Format Excel")
Dim smenu1_3 As New ToolStripMenuItem("Export Plan de Production - Format Html")

Dim path As New IO.DirectoryInfo(MyRoot)
Dim files As IO.FileInfo() = path.GetFiles("export_*.xml")

For Each file As IO.FileInfo In files
Dim MyFile As String
MyFile = file.Name.Replace(".xml", "").ToString
MyFile = MyFile.Replace("export_", "").ToString
smenu1_1.DropDownItems.Add(MyFile)
smenu1_2.DropDownItems.Add(MyFile)
smenu1_3.DropDownItems.Add(MyFile)
Next

menu1.DropDownItems.Add(smenu1_1)
menu1.DropDownItems.Add(New ToolStripSeparator())
menu1.DropDownItems.Add(smenu1_2)
menu1.DropDownItems.Add(New ToolStripSeparator())
menu1.DropDownItems.Add(smenu1_3)
menu1.DropDownItems.Add(New ToolStripSeparator())
menu1.DropDownItems.Add("Quitter")
menus.Items.Add(menu1)

menu2.DropDownItems.Add("test1")
menu2.DropDownItems.Add("test2")
menu2.DropDownItems.Add("test3")
menus.Items.Add(menu2)

Me.Controls.Add(menus)

AddHandler menu1.DropDownItemClicked, AddressOf ChangeItemMenu1_Click
AddHandler menu2.DropDownItemClicked, AddressOf ChangeItemMenu2_Click
End Sub


Mon premier problème avec
Private Sub ChangeItemMenu1_Click(ByVal sender As Object, ByVal e As ToolStripItemClickedEventArgs)

Dim checkClickMenu1_test1 As String = CType(sender, ToolStripMenuItem).Text
MessageBox.Show(checkClickMenu1_test1, "check test1") ' retourne "Fichier"

Dim checkClickMenu1_test2 As String = DirectCast(sender, ToolStripMenuItem).Text
MessageBox.Show(checkClickMenu1_test2, "check 2") ' retourne "Fichier"

Dim checkClickMenu1_test3 As String = e.ClickedItem.Text
MessageBox.Show(checkClickMenu1_test3, "check 3") ' retourne l'item cliqué (smenu1_1, smenu1_2, smenu1_3 ou Quitter)

If checkClickMenu1_test3.ToString = "Quitter" Then
MessageBox.Show(checkClickMenu1_test3.ToString, "bouton Quitter cliqué")
Me.Close()
End If

End Sub
Si je choisis l'option "Quitter" pour fermer l'application, j'ai l'erreur sur Me.Close()
L'exception ObjectDisposedException n'a pas été gérée. 
Impossible d'accéder à un objet supprimé.
Nom de l'objet : 'ToolStripDropDownMenu'
Pourquoi cette erreur ???

Merci de vos suggestions.
Afficher la suite 

Votre réponse

4 réponses

ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 21/07/2015 à 21:47
0
Merci
Bonjour,
Réponse purement instinctive :
Supprime d'abord (avant de fermer) ce que tu as créé.


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
- 21 juil. 2015 à 22:27
Bonsoir Jacques,

Merci de ta proposition.
L'ajout de = Nothing sur les contrôles n'évite pas l'erreur sur le Me.Close() du formulaire.

jean-marc
Commenter la réponse de ucfoutu
cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 22 juil. 2015 à 00:07
0
Merci
Salut

Me.menu1.Dispose()
Me.Close()



ps il vaut mieux déclarer tes controls en dehors du event load
Au fait pourquoi tu crées le menu dynamique ?
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
- 22 juil. 2015 à 07:08
Bonjour ShayW,

J'ai suivi tes conseils en déclarant les contrôles dans le concepteur.
        If e.ClickedItem.Text = "Quitter" Then
ToolStripMenu1.Dispose()
Me.Close()
End If
me ferme l'application.
Merci et bonne journée,
Commenter la réponse de cs_ShayW

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.