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

cs_JMO 1830 Messages postés jeudi 23 mai 2002Date d'inscription 24 décembre 2017 Dernière intervention - 21 juil. 2015 à 20:12 - Dernière réponse : cs_JMO 1830 Messages postés jeudi 23 mai 2002Date d'inscription 24 décembre 2017 Dernière intervention
- 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 

4 réponses

Répondre au sujet
ucfoutu 18025 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 janvier 2018 Dernière intervention - Modifié par ucfoutu le 21/07/2015 à 21:47
0
Utile
1
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 1830 Messages postés jeudi 23 mai 2002Date d'inscription 24 décembre 2017 Dernière intervention - 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 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention - 22 juil. 2015 à 00:07
0
Utile
1
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 1830 Messages postés jeudi 23 mai 2002Date d'inscription 24 décembre 2017 Dernière intervention - 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.