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

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
- - Dernière réponse : cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
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 

2 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
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
Statut
Membre
Dernière intervention
24 juin 2018
23 -
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
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
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
Statut
Membre
Dernière intervention
24 juin 2018
23 -
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