5

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

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

これはコードです:

    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.
        }
    }

編集:

私の解決策は一番下にあります。

4

6 に答える 6

6

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

(これは WPF アプリであると想定しています。元の Main メソッドを直接変更できるため、WinForms アプリの方が簡単です。)

于 2011-08-26T21:44:34.323 に答える
5

WPFを使用していると思いますか?WPF が提供するエントリ ポイント (メイン) を置き換える必要があります。次に、コマンドライン引数に応じて、WPF を開始するかどうかを指定できます。詳細については、この質問を参照してください。

WPF エントリ ポイントの置き換え

于 2011-08-26T21:51:55.043 に答える
2

APP.XAML ページから WindowUri を削除します。それはウィンドウを表示しません。また、 app() コンストラクターまたは起動イベントにロジックを追加します。

于 2019-08-12T10:46:42.093 に答える
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)これは、メソッドが単にデータを現在のインスタンスにロードすることを前提としています。

于 2011-08-26T21:46:54.337 に答える
1

こんにちは、返信ありがとうございます。返信が遅れて申し訳ありません。Nate が言ったことの一部は、以前に Window を呼び出す必要があり、コマンドライン引数がある場合はファイル名を解析する必要があるという点で正しかったです。私が見た問題は、それが私のスタートアップとして設定されていたため、その後もメインウィンドウを起動したことでした。そのため、Qwertie によって提案された情報を使用して app.xaml を変更しました。つまり、別のスタートアップを指していました。つまり、ウィンドウが不必要に開かれていなかったということです。

App.xaml.cs の ' App : Application ' クラス:

    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.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"-->

回答をくださった皆様に改めて感謝いたします。よろしくお願いします。

于 2011-08-27T20:23:07.370 に答える