2016-04-22 11 views
0


Ich erstelle eine App, die Dateien von Explorator öffnen muss. Natürlich kann ich das mit Argumenten machen, aber Explorator öffnet für jede Datei eine neue App. Ich möchte zum Beispiel Args an bestehende App senden - nicht neu öffnen."Öffnen mit ..." in vorhandener Form

+0

Haben Sie etwas überhaupt versucht? Ist das Winforms? – Jcl

+0

Ja, es ist winforms. – Freshek

Antwort

1

Explorer öffnet immer eine neue Instanz Ihrer Anwendung. Was Sie tun müssen, ist zu kontrollieren, ob es andere offene Instanzen gibt, und wenn dies der Fall ist, übergeben Sie die Befehlszeile und schließen Sie Ihre neue Instanz.

Es gibt einige Klassen, die Ihnen im .NET Framework helfen können, der einfachste Weg ist das Hinzufügen einer Referenz auf Microsoft.VisualBasic (sollte in der GAC sein ... und ignorieren Sie den Namen, es funktioniert auch für C#), dann Sie kann von WindowsFormsApplicationBase abgeleitet werden, die den gesamten Code für Sie vornimmt.

Etwas wie:

public class SingleAppInstance : WindowsFormsApplicationBase 
{ 
    public SingleAppInstance() 
    { 
     this.IsSingleInstance = true;  
     this.StartupNextInstance += StartupNextInstance; 
    } 

    void StartupNextInstance(object sender, StartupNextInstanceEventArgs e) 
    { 
     // here's the code that will be executed when an instance 
     // is opened. 

     // the command line arguments will be in e.CommandLine 
    } 

    protected override void OnCreateMainForm() 
    { 
    // This will be your main form: i.e, the one that is in 
    // Application.Run() in your original Program.cs 
    this.MainForm = new Form1(); 
    } 
} 

Dann in Ihrem Program.cs statt Application.Run zu verwenden, beim Start, tun wir:

[STAThread] 
static void Main() 
{ 
    string[] args = Environment.GetCommandLineArgs(); 
    var singleApp = new SingleAppInstance(); 
    singleApp.Run(args); 
} 
+0

Ich kann WindowsFormsApplicationBase nicht verwenden, weil ich meinen Code den gesamten Code bearbeiten muss. Ich hoffe es gibt Lösungen ohne VB zu implementieren. – Freshek

+0

Weil Sie Ihren Code den gesamten Code bearbeiten müssen? Was soll das bedeuten? Sie implementieren VB in meiner Lösung überhaupt nicht ... bitte seien Sie klarer, und wenn Sie spezifische Anforderungen haben, setzen Sie sie in die Frage – Jcl

+0

Ich weiß nicht viel VB. Zum Beispiel gibt es keine Invoke. Ich habe ein Projekt, das alles in C# durchgeführt werden sollte, ohne VB zu implementieren. – Freshek