【发布时间】:2014-03-31 22:29:12
【问题描述】:
新手问题!我有“MainWindow”和“EditSettings”,它们是类。据我所知,(如果有错误请纠正我)它们都是从 Window 类派生的类:
public partial class MainWindow : Window
当我真正想创建一个窗口时,我会创建一个派生类的实例,如下所示:
EditSettings winEditSettings = new EditSettings();
这意味着winEditSettings是EditSettings类的一个实例,它派生自Window。
如果我想编写一个接受我的任何窗口作为参数的方法,我会写什么作为参数?我最初有:
protected void OpenWindowOnce(Window win)
{
//This method tells the user whether the window is already open or not
foreach (Window n in Application.Current.Windows)
if (n == win)
{
MessageBox.Show("The window is already open");
}
else
{
MessageBox.Show("You have not opened that window yet");
win.Show();
}
似乎语句的 IF 部分不起作用 - 它一直告诉我窗口尚未打开,然后打开它的新版本。我调用方法如下:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
EditSettings winEditSettings = new EditSettings();
OpenWindowOnce(winEditSettings);
}
到目前为止,这就是我的程序中的全部内容 - 我只是想编写一种方法来防止窗口被多次打开。运行这段代码给了我:
“你还没有打开那个窗口” --> 窗口“winEditSettings”被打开了。
如果我再次按下按钮,我会收到两条消息,说“你还没有打开那个窗口”,它会打开另一个 winEditSettings 实例。
编辑
如何重写我的 OpenWindowOnce 方法以接受任何窗口类的任何实例?我希望能够将 winEditSettings、winMainWindow 或 winAbout 作为参数传递。
【问题讨论】:
-
我相信我的 OpenWindowOnce 方法不起作用,因为它试图将 Window 的实例作为参数传递,而我正在给它一个 EditSettings 的实例。我可以重写方法,让它接受我的任何窗口作为参数吗?