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

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

Votre réponse

4 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 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 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 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 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 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.