Menu contextuel

jlnblade Messages postés 10 Date d'inscription vendredi 10 décembre 2004 Statut Membre Dernière intervention 29 juillet 2005 - 18 juil. 2005 à 19:46
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 - 20 juil. 2005 à 13:20
Bonjour,

Je suis nouveau dans le domaine de la programmation en VB.NET (hé oui, un de plus lol). Voila, je crée un petit programme tout bête qui permet d'ouvrir un fichier texte, et de l'enregistrer. Je cherche à y rajouter un menu contextuel contenant les fonctions "Ouvrir" et "Enregistrer sous" par l'intermédiaire d'un clic droit de la souris dans la zone "richtextbox1".

Voici mon code:


Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk


End Sub


Private Sub Ouvrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ouvrir.Click


Dim objstreamreader As System.io.TextReader


If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then


objstreamreader = System.IO.File.OpenText(OpenFileDialog1.FileName)


RichTextBox1.Text = objstreamreader.ReadToEnd()


objstreamreader.Close()


Else


End If


End Sub


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


End Sub


Private Sub SauvegarderSous_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnregistrerSous.Click


Dim objstreamwriter As System.io.TextWriter


Dim fichier As String


fichier = RichTextBox1.Text


If SaveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then


objstreamwriter = System.IO.File.CreateText(SaveFileDialog1.FileName)


objstreamwriter.WriteLine(fichier)


objstreamwriter.Close()


Else


End If


End Sub


Private Sub Quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Quitter.Click


Me.Close()


End Sub


Private Sub Nouveau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nouveau.Click


Dim reponse As MsgBoxResult


If RichTextBox1.Text <> "" Then


MessageBox.Show("Attention, ceci va effaçer votre travail en cours!" & vbCrLf & "Voulez-vous Continuez?", "Attention", MessageBoxButtons.YesNo, MessageBoxIcon.Question)


If reponse = MsgBoxResult.Yes Then


RichTextBox1.Text = ""


Else


End If


End If


End Sub


Private Sub Texte_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


End Sub


Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged


End Sub


Protected Sub ContextMenu1_Popup(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContextMenu1.Popup


Dim ouvrir As New MenuItem("Ouvrir")


Dim enregistrersous As New MenuItem("Enregistrer sous")


ContextMenu1.MenuItems.Clear()


If ContextMenu.SourceControl Is RichTextBox1 Then


ContextMenu1.MenuItems.Add(enregistrersous)


ContextMenu1.MenuItems.Add(ouvrir)


Else : MsgBox("Impossible de créer un menu contextuel ici!")


End If


End Sub


End Class



PS: Mon menu ne s'affiche pas et j'ai aussi un problème au niveau de la fonction "Nouveau_Click", je n'arrive pas à effacer le texte dans la textbox.
Merci de votre aide ...

7 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
18 juil. 2005 à 22:13
Salut



Voici une solution fonctionnelle



Private Sub MesControles_MouseDown(ByVal sender As
Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles
RichTextBox1.MouseDown, TextBox.MouseDown

EnregistrerSous.Visible = True

Ouvrir.Visible = True

If CType(sender, Control).Name.Equals(RichTextBox1.Name) Then



Nouveau.Visible = False

Quitter.Visible = False

Enregistrer.Visible = False

Else

Nouveau.Visible = True

Quitter.Visible = True

Enregistrer.Visible = True

End If



End Sub



J'ai rajouté une texbox pour te montrer comment tu peux gerer cette textbox.



Les deux controles ont la propriété contextmenu remplie avec ton menu contextuel.



La ContextMenu1_Popup esxt a supprimer







Voila

J'espere que c'est le fonctionnement espéré
0
jlnblade Messages postés 10 Date d'inscription vendredi 10 décembre 2004 Statut Membre Dernière intervention 29 juillet 2005
19 juil. 2005 à 12:22
Salut,

Merci pour ta réponse, cependant, mon menu contextuel ne s'affiche pas et les fonctions "Enregistrer Sous", "Nouveau", et "Quitter", ne sont plus accessible via le menu "Fichier".
J'ai chercher sur internet pour avoir des descriptions détaillées mais tout ce que j'essaie ne fonctionne pas.
Je conserve ta réponse qui me sera utile je pense d'ici peu (lorsque je comprendrai un peu mieu le fonctionnement de ce code).
En tout cas merci et j'espère avoir d'autres solutions afin de résoudre mon problème.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
19 juil. 2005 à 13:50
Salut



Fichier est contenu dans un mainmenu??

Les items menu appartiennent soit à un mainmenu soit à un contexte menu.

Mais pas à deux chose.

--> Donc il faut duplkiquer les menus.



Car si je met le code suivant dans le form_load

fichier.MenuItems.Add(EnregistrerSous)

fichier.MenuItems.Add(Ouvrir)

fichier.MenuItems.Add(Nouveau)

fichier.MenuItems.Add(Enregistrer)

fichier.MenuItems.Add(Quitter)





j'ai le menu contectuel qui ne fonctionne plus
0
jlnblade Messages postés 10 Date d'inscription vendredi 10 décembre 2004 Statut Membre Dernière intervention 29 juillet 2005
20 juil. 2005 à 01:14
Salut,

Après avoir effectué des recherches, j'ai réussi à comment faire pour afficher mon menu contextuel. En revanche, je ne sais pas comment faire pour que le "Ouvrir" de mon contextmenu fasse la même chose que le le "Ouvrir" de mon mainmenu. Dois-je écrire de nouvelles fonctions (si oui lesquelles et où ...) ou existe-t-il un moyen pour créer une sorte le lien afin que mes deux "bouttons ouvrir" fassent la même action.

Je reposte mon code ci dessous :


Friend quelfichier As String


Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk




End Sub




Private Sub Ouvrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ouvrir.Click


Dim objstreamreader As System.io.TextReader


If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then


objstreamreader = System.IO.File.OpenText(OpenFileDialog1.FileName)


RichTextBox1.Text = objstreamreader.ReadToEnd()


objstreamreader.Close()


Else


End If




End Sub




Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load




End Sub




Private Sub SauvegarderSous_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnregistrerSous.Click


Dim objstreamwriter As System.io.TextWriter


Dim fichier As String


fichier = RichTextBox1.Text


If SaveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then


objstreamwriter = System.IO.File.CreateText(SaveFileDialog1.FileName)


objstreamwriter.WriteLine(fichier)


objstreamwriter.Close()


Else


End If




End Sub




Private Sub Quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Quitter.Click


Me.Close()


End Sub




Private Sub Nouveau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nouveau.Click


Dim reponse As MsgBoxResult


If RichTextBox1.Text <> "" Then


MessageBox.Show("Attention, ceci va effaçer votre travail en cours!" & vbCrLf & "Voulez-vous Continuez?", "Attention", MessageBoxButtons.YesNo, MessageBoxIcon.Question)


If reponse = MsgBoxResult.Yes Then


RichTextBox1.Text = ""


Else


End If


End If


End Sub




Private Sub Texte_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)




End Sub




Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged




End Sub




Protected Sub ContextMenu1_Popup(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContextMenu1.Popup


Dim ouvrir As New MenuItem("Ouvrir")


Dim enregistrersous As New MenuItem("Enregistrer sous")


ContextMenu1.MenuItems.Clear()


ContextMenu1.MenuItems.Add(ouvrir)


ContextMenu1.MenuItems.Add(enregistrersous)


End Sub




Private Sub RichTextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseDown


Dim Point As New Point(e.X, e.Y)


If (e.Button = MouseButtons.Right) Then


ContextMenu1.Show(RichTextBox1, Point)


End If


End Sub


End Class

Merci pour votre aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
20 juil. 2005 à 06:49
menu contextuel



++++++







Private Sub Quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Quitter.Click


ME.quitter(sender,e)


End Sub



Mainmenu

++++++++++



Private Sub Quitter2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Quitter2.Click


ME.quitter(sender,e)


End Sub



Traitement commun

++++++++++++++++++



Private Sub Quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

me.Close

end sub



Les parametres pour le traitement commun ne sont pas obligatoire
0
jlnblade Messages postés 10 Date d'inscription vendredi 10 décembre 2004 Statut Membre Dernière intervention 29 juillet 2005
20 juil. 2005 à 10:11
Je viens de mettre ce que tu m'as dit. J'ai une erreur sur la ligne "Me.ouvrir (sender, e)" me disant qu'un accès à la propriété doit assigner la propriété ou utiliser sa valeur.

Merci beaucoup pour ton aide nhervagault.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
20 juil. 2005 à 13:20
Tu n'a pas besoin de mettre le me et les parametres.



Je ne vois pas trop ou est l'erreur sinon.



Et je n'ai pas l'exemple c'est sur un autre ordi.
0