0

我知道这个主题在 SO 上随处可见,但我找不到任何具体的内容。我有一个类用于存储我为我的应用程序创建的所有窗口。我想要做的是创建一个新窗口,如果不存在,并附加一些事件。问题是事件正在引发错误。

下面的代码片段在类中,当事件发生时,应该创建一个新窗口。下面是两个事件处理程序定义。这些都在同一个班级。

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;

两个事件处理程序的代码

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 回答