Contrôle MenuStrip - ToolStripMenuItem Quitter

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 21 juil. 2015 à 20:12
cs_JMO Messages postés 1854 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.

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 21/07/2015 à 21:47
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.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 juil. 2015 à 00:07
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 ?
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
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,
0
Rejoignez-nous