none
Drag and drop sur icone RRS feed

  • Question

  • Bonjour,

    En attendant 2011,

    J'aimerais savoir comment lancer l'exécution d'une application WinForm par drag-drop d'un fichier sur son icone posée sur le bureau.

    Sous XP, Vista et W7.

    Merci de vos suggestions.


    Alain
    lundi 27 décembre 2010 23:31

Réponses

  • J'ai trouvé : il suffit d'intercepter l’évènement MyApplication.Startup, qui génère le code dans Application.Designer. 

        Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
          My.Settings.StartFiles.Clear()       ' Raz collections de files initiales
          For Each f As String In e.CommandLine
            My.Settings.StartFiles.Add(f)      ' Mémoriser les fichiers dragués
          Next
        End Sub
    
    

    Cependant j'ai observé que cette classe était générée automatiquement et regénérée dès que l'on modifie quelque chose dans les propriétés de l'appli. Par exemple si on change de FormSplatch. Dans ce cas l’évènement Startup est perdu...


    Alain
    • Marqué comme réponse AchLog mardi 28 décembre 2010 17:46
    mardi 28 décembre 2010 16:58

Toutes les réponses

  • Bonjour,

    Lorsque vous faites un glissez déplacer d'un fichier vers un executable (ou le raccourci associé), Windows execute l'application en spécifiant en paramètre le fichier qui a été déposé.

    Pour récupérez ce fichier, créer une méthode Main() :

      Sub Main(ByVal args As String())
        Dim monFichier As String
    
        If args.Length > 0 Then
          monFichier = args(0)
        Else
          Console.WriteLine("Aucun fichier n'a été spécifié")
        End If
    
      End Sub
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 28 décembre 2010 09:30
    Modérateur
  • Ok Gilles, merci.

    Mais je suis un peu nul sans doute... J'ai bien ajouté un module avec une Function Main mais... devinez quoi ? Elle n'est pas appelée...

    En fait je ne sais pas bien comment ajouter ce Main. et l'aide en ligne ne le dit pas explicitement. MyApplication montre bien la déclaration d'un Main mais VisualStudio indique que la procédure est cachée.

    Merci de votre conseil.

     


    Alain
    mardi 28 décembre 2010 16:08
  • J'ai trouvé : il suffit d'intercepter l’évènement MyApplication.Startup, qui génère le code dans Application.Designer. 

        Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
          My.Settings.StartFiles.Clear()       ' Raz collections de files initiales
          For Each f As String In e.CommandLine
            My.Settings.StartFiles.Add(f)      ' Mémoriser les fichiers dragués
          Next
        End Sub
    
    

    Cependant j'ai observé que cette classe était générée automatiquement et regénérée dès que l'on modifie quelque chose dans les propriétés de l'appli. Par exemple si on change de FormSplatch. Dans ce cas l’évènement Startup est perdu...


    Alain
    • Marqué comme réponse AchLog mardi 28 décembre 2010 17:46
    mardi 28 décembre 2010 16:58
  • J'ai trouvé là aussi la réponse au problème.

    Il faut générer l'évènement NON dans Application.Designer mais dans ApplicationEvents !

    Voilà. L'évènement reste préservé en cas de re génération du Designer.

    Merci Gilles pour votre aide fidèle.

     


    Alain
    mardi 28 décembre 2010 17:45
  • Ok Gilles, merci.

    Mais je suis un peu nul sans doute... J'ai bien ajouté un module avec une Function Main mais... devinez quoi ? Elle n'est pas appelée...

    En fait je ne sais pas bien comment ajouter ce Main. et l'aide en ligne ne le dit pas explicitement. MyApplication montre bien la déclaration d'un Main mais VisualStudio indique que la procédure est cachée.

    Merci de votre conseil.

     


    Alain

    Bonjour,

    Autant pour moi, il fallait créer un "Module" (avec n'importe quel nom). Ajoutez dans ce module mon code précédent et dans les propriétés du projet (onglet Application), décochez la case "Activer l'infrastructure de l'application" et sélectionnez "Sub Main" dans objet de démarrage.

    Pour information : Le Main() est la première méthode qui est appelé par Windows au démarrage de votre application...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mercredi 29 décembre 2010 09:08
    Modérateur
  • Ok Gilles, merci de cette précision.

    Mais l'interception de l’évènement "MyApplication.Startup", comme je l'ai fait, est une bonne solution aussi, n'est-ce pas ?

    Bien cordialement

     


    Alain
    mercredi 29 décembre 2010 11:05
  • Bonjour,

    Cela rejoint au même...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mercredi 29 décembre 2010 17:44
    Modérateur