10

開いているすべてのウィンドウを取得しようとしています。使用しようとしましたが、ループのあるSystem.Windows.Application.Current.Windows行で Null Pointer Exception が発生します。foreach誰が何が間違っているのか考えていますか?

public Window getWindow(String Title)
{
    Window windowObject = null;
    Console.WriteLine("Inside getWindow");
    foreach (Window window in System.Windows.Application.Current.Windows)
    {
        if (window.Title == Title)
        {
            windowObject = window;
        }
    }
    return windowObject;
}
4

3 に答える 3

11

これは、WPF で実行中のアプリケーションで開いているすべてのウィンドウを循環する方法です。

foreach (var Window in App.Current.Windows)
        { 
           // TODO: write what you want here
        }

ウィンドウフォームで知りたい場合は、アプリの代わりにアプリケーションを使用してください。さよなら。

于 2016-06-22T05:54:38.823 に答える
4

またはCurrent_ Windows_null

Windows プロパティは、アプリケーション オブジェクトを作成したスレッドからのみアクセスできます。これは、アプリケーション オブジェクトが作成された後、WPF アプリケーションでのみ機能します。

于 2012-08-29T11:48:06.400 に答える
1

System.Windows は名前空間であり、Application は現在のアプリケーション コンテキストを参照する実際のクラスであることに注意してください。これが意味することは、「Application.Current.Windows」は、アプリケーション自体によって生成されたすべてのウィンドウのみを参照するということです。すべてのウィンドウをループして、タイトルを出力してみてください。

プログラムで何が起こるかというと、タイトルがアプリケーションによって生成されたウィンドウと等しくない限り、if ステートメントは常に false になるため、windowObject は null のままになり、メソッドによって null が返されます。

于 2014-06-08T16:13:00.747 に答える