0

このトピックはSOのどこにでも表示されていることは知っていますが、これに固有のものは見つかりませんでした. アプリケーション用に作成したすべてのウィンドウを格納するために使用されるクラスがあります。私がやろうとしているのは、新しいウィンドウが存在しない場合は作成し、それにいくつかのイベントを添付することです。問題は、イベントがエラーをスローしていることです。

以下のコード スニペットは、イベントが発生したときに新しいウィンドウが作成されるクラスに含まれています。その下には、2 つのイベント ハンドラーの定義があります。これらはすべて同じクラスです。

Window window = FindWindow(windowId);
if (window == null)
{
    window = new Window();
    window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing);
    window.Closed += new EventHandler(window_Closed);
    _winDict.Add(windowId, window);
}
window.Owner = Application.Current.MainWindow;
window.Title = title;
window.Content = guc;
window.SizeToContent = SizeToContent.WidthAndHeight;
window.ResizeMode = ResizeMode.NoResize;
window.ShowInTaskbar = false;

2 つのイベント ハンドラのコード

void window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    throw new NotImplementedException();
}

void window_Closed(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

うまくいけば、これが問題のデバッグに役立つ十分な情報です。

前もって感謝します。

4

2 に答える 2

3

イベント ハンドラーを設定しているメソッドは静的メソッドですか? その場合、インスタンス メソッド 'window_Closing' および 'window_Closed' にアクセスできません。

于 2012-09-10T23:30:37.407 に答える
1

このコードスニペットが静的メソッド内に表示される場合、「this」ポインターはなく、window_Closingメソッドとwindow_Closedメソッドにアクセスできません。

window_Closedとwindow_Closingを静的にして、コンパイルされるかどうかを確認してください。ただし、これらにも「this」ポインターがないことに注意してください。

もちろん、おそらく「実際の」修正は、メソッドを非静的にし、現在の静的メソッドでクラスのインスタンスを作成してから、その非静的メソッドを呼び出すことです。

(注:コンパイルされておらず、このスニペットを試していません)

class SomeClass
{
    static void CurrentFunc()
    {
        var someClass = new SomeClass();
        someClass.NewFunc();
    }

    private void NewFunc()
    {
        Window window = FindWindow(windowId);
        if (window == null)
        {
            window = new Window();
            window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing);
            window.Closed += new EventHandler(window_Closed);
            _winDict.Add(windowId, window);
        }
        window.Owner = Application.Current.MainWindow;
        window.Title = title;
        window.Content = guc;
        window.SizeToContent = SizeToContent.WidthAndHeight;
        window.ResizeMode = ResizeMode.NoResize;
        window.ShowInTaskbar = false;
    }

    private void window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        throw new NotImplementedException();
    }

    private void window_Closed(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }
}
于 2012-09-11T02:42:07.007 に答える