2011-08-26 2 views
5

プログラムがコマンドライン引数で開始されたとき(つまり、ファイル名が渡されたとき)にメインウィンドウのロードを自動的にオフにすることができるかどうかは疑問だ。私が持っている問題は、関連するファイルがクリックされたときにプログラムが読み込まれることですが、別のメインウィンドウを開いてそのプログラムを使用することによってプログラムが読み込まれるということです。私が持っている問題は、プログラムがまだMainWindowを起動しているので、ファイル内容と空の2つのWindowsが開きます。C# - ウィンドウなしのプログラム

どうすれば空白のウィンドウを防ぐことができますか?私が見ているように、私はメインウィンドウを開く、メインウィンドウを閉じる、またはメインウィンドウにファイルを渡すようにプログラムを停止するか、停止します。私の問題は、これらのどれがベストか、それをどうやってやるかわからないことです。

これはコードです:

protected override void OnStartup(StartupEventArgs e) 
    { 
     if (e.Args != null && e.Args.Count() > 0) 
     { 
      this.Properties["ArbitraryArgName"] = e.Args[0]; 
     } 
     base.OnStartup(e); 

     if (Application.Current.Properties["ArbitraryArgName"] != null) 
     { 

      string fname = Application.Current.Properties["ArbitraryArgName"].ToString(); 
      MainWindow mw = new MainWindow(); 
      mw.Show(); 
      mw.readVcard(fname); 
      Application.Current.Windows. 
     } 
    } 

EDIT:

私のソリューションは、一番下にあります。

+0

コマンドライン引数を読んだり何らかの値を入力した場合、メインウィンドウが表示されないのはなぜですか? –

答えて

5

あなたはWPFを使用すると仮定しますか? WPFが提供するエントリポイント(Main)を置き換える必要があります。次に、コマンドライン引数に応じてWPFを起動するかどうかを指定できます。

Replacing the WPF entry point

6

独自のMainメソッドを持つ別のクラスを追加して、実行可能ファイルのエントリポイントに設定できると思います。次に、メソッドの引数を解析してメインウィンドウを表示するかどうかを指定できます。

は(私は、これはWPFアプリですと仮定しています - あなたが直接、元の主な方法を変更することができるようにWinFormsアプリで簡単です。)次のように

+0

ありがとうございます。うん、それはWPFだ。私は私がフォローし、朝にチェックして戻ってくると思う。 – user646265

+0

WPFが生成する 'Main'メソッドを置き換える方法については、Qwertieの答えを参照してください。 –

+1

@Merlyn:参照された質問に対する受け入れられた答えでは、あなたがそれを行うことができても、回答者は代わりに別のクラスを作成することを推奨しています:) –

1

私はあなたのコードを書き換えたい:

protected override void OnStartup(StartupEventArgs e) 
{ 
    // start application window 
    MainWindow mw = new MainWindow(); 
    mw.Show(); 
    // store argument and read card info 
    if (e.Args != null && e.Args.Count() > 0) 
    { 
     this.Properties["ArbitraryArgName"] = e.Args[0]; 
     string fname = Application.Current.Properties["ArbitraryArgName"].ToString(); 
     mw.readVcard(fname); 
    } 
} 

これは、メソッドMainWindow.readVcard(string)が単に現在のインスタンスにデータをロードすることを前提としています。

1

こんにちは皆と私に戻って取得するためのおかげで、私は戻ってすぐに来ていませんでした申し訳ありません。詳細は、この質問を参照してください。ネイトが言ったことの一部は、私が以前に私のウィンドウを呼び出す必要があったという点で正しいですし、コマンドライン引数があった場合、ファイル名を解析します。それは私のスタートアップとして設定されていたので、その後メインウィンドウが起動したので、Qwertieが提案した情報を使用してapp.xamlを変更しました。これは別のスタートアップを指していました。ウィンドウが不必要に開かれていないことを意味していました。その答えをみんなに再び

<Application x:Class="Vcardviewer.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
      Startup="OnStartUp" 
      > 
    <Application.Resources> 

    </Application.Resources> 
</Application> 
<!--StartupUri="MainWindow.xaml"--> 

ありがとう:App.xaml.cs内のクラス:App.xamlで

private void OnStartUp(object sender, StartupEventArgs e) 
    { 
     OnStartup(e); 
    } 

    protected override void OnStartup(StartupEventArgs e) 
    { 
     MainWindow mw = new MainWindow(); 

     if (e.Args != null && e.Args.Count() > 0) 
     { 
      this.Properties["ArbitraryArgName"] = e.Args[0]; 
     } 
     //base.OnStartup(e); 

     if (Application.Current.Properties["ArbitraryArgName"] != null) 
     {    
      string fname = Application.Current.Properties["ArbitraryArgName"].ToString(); 

      mw.Show(); 
      mw.readVcard(fname); 
      //Application curApp = Application.Current; 
      //curApp.Shutdown(); 
     } 

     else if (e.Args.Count() == 0) 
     { 
      mw.Show(); 
     } 
    } 

: 'アプリケーションのApp' は、

。皆さんに心から感謝します。

0

私はapp.xmalを編集して開始URLを削除します。次に、app.xaml.csを編集して、アプリケーションのコンストラクタを追加してそこで処理を行います。アプリケーションを閉じるために「Shutdown()」を使用します。

必要に応じてウィンドウを開くことができます。他のウィンドウを起動すると、OnStartupイベントを使用してそれを行います...

関連する問題