2016-04-22 11 views
0


私はExploratorからファイルを開く必要があるアプリケーションを作成しています。もちろん、私はargsを使用してそれを行うことができますが、Exploratorはすべてのファイルに対して新しいアプリケーションを開きます。たとえば、既存のアプリにargsを送信したいのですが、新しいアプリを開かないでください。"Open with ..."既存のフォーム

+0

あなたがすべてで何かをしようとしたことがありますか?これはwinformsですか? – Jcl

+0

はい、winformsです。 – Freshek

答えて

1

エクスプローラは、常にアプリケーションの新しいインスタンスを開きます。必要なのは、開いている他のインスタンスがあるかどうかを制御することです。存在する場合は、コマンドラインを渡して新しいインスタンスを閉じます。

.NETフレームワークで役立ついくつかのクラスがありますが、最も簡単な方法はMicrosoft.VisualBasicへの参照を追加することです(GAC内にあるはずです...名前を無視してC#でも機能します)。 WindowsFormsApplicationBaseから派生することができます。これはすべての定型文のコードです。以下のような

何か:

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(); 
    } 
} 

は、その後、あなたのProgram.csで、代わりに起動時に、Application.Runを使用して、我々はない:

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

私はすべてのコードを自分のコードを編集する必要があるため、私はWindowsFormsApplicationBaseを使用できません。 VBを実装しないと解決策があることを願っています。 – Freshek

+0

コードをすべて編集する必要がありますか?それはどういう意味ですか?私のソリューションにはVBを実装していません...もっと明確にしてください。具体的な要件がある場合は、質問に入れてください。 – Jcl

+0

私はあまりVBを知らないです。たとえば、Invokeはありません。私はVBを実装せずにC#ですべて行う必要があるプロジェクトがあります。 – Freshek