VB 2010: Gérer les "ouvrir avec"

Résolu
Anonyme209 Messages postés 761 Statut Membre -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour,

Je développe une application vb 2010.
Mon programme comporte une textbox.
Je voudrais que, lorsque l'on clique droit sur un fichier, ouvrir avec et que l'on choisisse mon executable, l'appli lise le fichier et l'affiche dans la textbox.
Pour le moment, cette opération ouvre juste mon application, mais aucun texte dans la textbox

Merci de votre aide.

12 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Je te conseillerais de mettre une action dans le menu contextuel des fichiers texte qui ouvrirait ton appli avec l'affichage du fichier texte.
    Pour ce faire dans les 2 cas, il faut que tu récupères le chemin de ton fichier texte pour pouvoir l'afficher dans une TextBox ou une RichTexBox au choix suivant l'importance du fichier.
    0
  2. Anonyme209 Messages postés 761 Statut Membre 19
     
    Bonjour, merci de ta réponse.

    Je voudrais cependant que cela se fasse avec tous les types de fichiers, pas seulement avec les fichiers textes. Pour ce qui est de modifier le menu contextuel, je vais faire plus de recherches de mon côté.
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Le fait de mettre le menu contextuel sur tous les fichiers n'est pas un problème. Le problème se situe de l'ouverture de ces fichiers qui est différente pour chaque extension. Pour le menu contextuel tu peux voir la marche à suivre dans différents de mes programmes. Par exemple un de mes derniers : "Visionneuse image" qui lui met un menu contextuel pour les dossier images.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Anonyme209 Messages postés 761 Statut Membre 19
     
    Bonjour, le code de mon programme pour le bouton ouvrir est

    Try
    RichTextBox1.Rtf = fichier
    Catch ex As Exception
    RichTextBox1.Text = fichier
    End Try


    Je voudrais que mon programme s'ouvre et exécute le même code dès l'ouverture (en remplaçant fichier par l'adresse du fichier) - sans que l'on n'appuie sur le bouton ouvrir - lorsque l'on choisit d'ouvrir un fichier avec mon programme.

    Merci de votre aide et désolé si je n'avais pas bien exposé mon problème.
    0
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Ouvrir un nouveau projet nommé: Lire_texte (c'est important pour la suite)
    mettre dans le Form une RichTextBox et un Button avec ce code:

    Option Strict On
    Imports System.IO
    Imports System.Text
    Imports Microsoft.Win32
    Public Class Form1
        Dim cheminsource As String 'chemin du fichier texte
        Dim Key As RegistryKey
        Dim cle_txt As String 'clé associée à l'extension .txt
       Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Button1.Text = "Créer menu contextuel"
            Verificationcletxt() 'Verifier si la clé Ouvrir Fichier texte existe
            'ouverture par clic droit
            'recuperer le chemin du fichier texte
            For Each s As String In My.Application.CommandLineArgs
                cheminsource = s 'chemin du fichier texte
            Next s
            If cheminsource = "" Then
                Exit Sub
            Else
                liretexte(cheminsource) 'ouvrir le fichier texte dans une RichTextBox
            End If
        End Sub
        'Verifier si la clé Ouvrir Fichier texte existe
        Private Sub Verificationcletxt()
            cle_txt = rechercher_cle(".txt") 'chemin de la clé Ouvrir Fichier texte
            Dim test As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(cle_txt & "\shell\Ouvrir Fichier texte\command", False)
            If test Is Nothing Then
                Button1.Text = "Créer menu contextuel"
            Else
                Button1.Text = "Supprimer menu contextuel"
            End If
        End Sub
        'création et suppression du menu contextuel Ouvrir Fichier texte
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            cle_txt = rechercher_cle(".txt") 'chemin clé
            If Not IsAdmin() Then
                MessageBox.Show("La modification du menu contextuel de l'explorateur ne se fera pas car vous n'avez pas les " & _
                     "droits d'aministrateur." & Environment.NewLine & "Pour modifier cette option, vous devez fermer ce programme " & _
                    " et le relancer en tant qu'administrateur.", "Droits d'aministrateur", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                If Button1.Text = "Créer menu contextuel" Then
                    'On crée la clé Ouvrir Fichier texte
                    Key = Registry.ClassesRoot.CreateSubKey(cle_txt & "\shell\Ouvrir Fichier texte\command") 'adapter le nom du menu contextuel
                    Registry.SetValue("HKEY_CLASSES_ROOT\" & cle_txt & "\shell\Ouvrir Fichier texte\command", "", My.Application.Info.DirectoryPath & "\" & "Lire_texte.exe " & """%1""") 'adapter le nom de l'appli
                    MessageBox.Show("Votre clé est créée", "Création clé registre", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Button1.Text = "Supprimer menu contextuel"
                Else
                    Button1.Text = "Supprimer menu contextuel"
                    'On supprime la clé Ouvrir Fichier texte
                    Key = Registry.ClassesRoot.OpenSubKey(cle_txt & "\shell", True)
                    Key.DeleteSubKeyTree("Ouvrir Fichier texte") 'adapter le nom du menu contextuel
                    MessageBox.Show("Votre clé est supprimée", "Suppression clé registre", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Button1.Text = "Créer menu contextuel"
                End If
            End If
        End Sub
        'affiche le fichier texte dans une RichTextBox
        Private Sub liretexte(ByVal chemin As String)
            Dim fileReader As String
            fileReader = My.Computer.FileSystem.ReadAllText(chemin, Encoding.Default)
            RichTextBox1.Text = fileReader
        End Sub
        Private Function IsAdmin() As Boolean
            Return My.User.IsInRole(Microsoft.VisualBasic.ApplicationServices.BuiltInRole.Administrator)
        End Function
        'on recherche la clé associée à l'extension
        Public Function rechercher_cle(ByVal extension As String) As String
            ' va chercher la sous-clé correspondante 
            Key = Registry.ClassesRoot.OpenSubKey(extension)
            extension = CStr(Key.GetValue(""))
            Return extension
        End Function
    End Class
    


    Il faut que tu comprennes qu'en faisant un menu contextuel, c'est pour récupérer le chemin du fichier. A partir de là tu peux utiliser ce chemin pour faire ce que tu veux.

    Bonne programmation
    0
  7. Anonyme209 Messages postés 761 Statut Membre 19
     
    Bonjour,

    Je tiens à préciser même après avoir supprimer la clé, la richtextbox est automatiquement remplie du texte du fichier ouvert.
    Je ne sais pas si c'est normal, mais ça marche avec tous les fichiers, pas seulement avec les fichiers texte.

    Sinon, comment faire pour que ce code marche dans mon application de départ, en sachant que mon application est portable (sans installation) et que l'exécutable peut donc bouger?
    0
  8. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Je voudrais que, lorsque l'on clique droit sur un fichier, ouvrir avec et que l'on choisisse mon executable, l'appli lise le fichier et l'affiche dans la textbox.

    Si tu ouvres ton application comme tu voulais le faire au départ, tu n'as que ce code à mettre:

    Option Strict On
    Imports System.IO
    Imports System.Text
    Public Class Form1
        Dim cheminsource As String 'chemin du fichier texte
          Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
                   'recuperer le chemin du fichier texte
            For Each s As String In My.Application.CommandLineArgs
                cheminsource = s 'chemin du fichier texte
            Next s
            If cheminsource = "" Then
                Exit Sub
            Else
                liretexte(cheminsource) 'ouvrir le fichier texte dans une RichTextBox
            End If
        End Sub
     'affiche le fichier texte dans une RichTextBox
        Private Sub liretexte(ByVal chemin As String)
            Dim fileReader As String
            fileReader = My.Computer.FileSystem.ReadAllText(chemin, Encoding.Default)
            RichTextBox1.Text = fileReader
        End Sub
    


    Je tiens à préciser même après avoir supprimer la clé, la richtextbox est automatiquement remplie du texte du fichier ouvert.
    Je ne sais pas si c'est normal, mais ça marche avec tous les fichiers, pas seulement avec les fichiers texte.


    C'est normal. Je ne sais pas si tu as compris que l'action ce fait à l'ouverture de ton appli:

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


    Le menu contextuel c'est une facilité. Car avec ton clic droit pour choisir ton exécutable , tu obliges l'utilisateur à aller le chercher, mais c'est ton choix.

    J'espère que cela est plus clair pour toi. Il y a tous les commentaires pour la compréhension.

    0
  9. Anonyme209 Messages postés 761 Statut Membre 19
     
    Bonjour,

    Merci beaucoup, ça marche.

    Je met le sujet en résolu.

    PS: est-ce obligé de mettre l'option strict à ON? Ça me crée des erreurs au niveau de mes msgbox.
    0
  10. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    l' Option Strict On te souligne toutes tes erreurs pour les corriger. Avant VB.NET on mettait :

    MsgBox ("Bonjour")

    Maintenant il faut mettre:

    le corps du message: Bonjour
    le titre du message: Salutation
    L'icone à afficher: Information

    Derrière MessageBoxIcon tu mets un point, tu va avoir un menu contextuel qui va s'afficher avec toutes les icones que tu peux mettre.
    Ceci est valable pour tous ce qui a un point c'est très parique, il faut l'utiliser.

     MessageBox.Show("Bonjour", "Salutations", MessageBoxButtons.OK, MessageBoxIcon.Information)
                


    Apprends à mettre tes MsgBox comme ceci. sauf quand tu veux faire des test bien entendu!

    Bonne programmation
    0
  11. Anonyme209 Messages postés 761 Statut Membre 19
     
    Bonjour,

    Personellement je préfère utiliser
    MsgBox("message", MsgBoxStyle.Information + vbOkOnly, "titre")

    que
    MessageBox.Show("Bonjour", "Salutations", MessageBoxButtons.OK, MessageBoxIcon.Information)


    Sinon, l'erreur était que l'option strict on obligeait à remplacer
    MsgBoxStyle.Information + vbOkOnly

    par
    CType(MsgBoxStyle.Information + vbOkOnly, MsgBoxSyle)


    Embêtant mais facile à régler.
    0
  12. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Mais ce n'est pas ce que tu préfères. C'est la manière de coder en VB.NET. Après bien sur tu fais ce que tu veux, mais généralement quand on fait un travail on essaie d'appliquer les règles.
    Mais si tu ne veux pas être embêté tu mets:
    Option Strict Off

    parce que si un programmeur a réglé son VisualStudio 2010 automatiquement à l'ouverture en Option Strict On (c'est mon cas) , je ne t'explique pas les erreurs qu'il va trouvé.

    Et pour les déclarations des variable numériques tel que:
    Integer, Decimal, Double, Long etc., cela te corrige tes erreurs.

    T'apprécies à l'usage. C'est juste une discipline a avoir comme dans beaucoup de domaine
    0