Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何从远程类调用未引用的方法?(允许使用C#和VB.NET)_Wpf_Vb.net_C#_Visual Studio_Oop - Fatal编程技术网

Wpf 如何从远程类调用未引用的方法?(允许使用C#和VB.NET)

Wpf 如何从远程类调用未引用的方法?(允许使用C#和VB.NET),wpf,vb.net,c#,visual-studio,oop,Wpf,Vb.net,C#,Visual Studio,Oop,就我个人而言,我找不到解决这个问题的办法: 我建立了一个类,它可以做很多事情,其中之一就是操纵窗口。其中一个窗口是MainWindow.xaml 例如,我希望这个类关闭main窗口.xaml,也就是说,例如,如果从OtherClass.cs中调用一个方法 基本上:我想从一个遥远的类访问窗口(MainWindow.xaml.cs)的代码隐藏中的未引用方法,尽管在同一个项目(Visual Studio)中。 当我在中使用主窗口(使用主窗口或导入主窗口)并使用其成员关闭窗口时,如下所示: using

就我个人而言,我找不到解决这个问题的办法: 我建立了一个类,它可以做很多事情,其中之一就是操纵窗口。其中一个窗口是
MainWindow.xaml

例如,我希望这个类关闭
main窗口.xaml
,也就是说,例如,如果从
OtherClass.cs
中调用一个方法

基本上:我想从一个遥远的类访问窗口(
MainWindow.xaml.cs
)的代码隐藏中的未引用方法,尽管在同一个项目(Visual Studio)中。


当我在中使用主窗口(
使用主窗口
导入主窗口
)并使用其成员关闭窗口时,如下所示:

using MainWindow
Public class OtherClass
{
    // OtherClass is instanced elsewhere and then is decided to close MainWindow.
    // So I imagine doing the following:
    private void CommandClose()
    {
        CloseMainWindow();
    }
    ...
}
和MainWindow.xaml.cs内的:

Public class MainWindow
{
    Public void CloseMainWindow()
    {
        this.close();
    }
    ...
}
尽管我收到以下错误:“对非共享成员的引用需要对象引用”

意思是我应该做一些类似的事情:

using MainWindow
Public class OtherClass
{
    MainWindow myWindow // Though now I have a new window :/
    private void CommandClose()
    {
       myWindow.CloseMainWindow();
    }
    ...
}
因此,要访问MainWindow.xaml.cs中的任何成员而不创建新实例,我需要共享它们吗?但这会破坏让它对窗口执行任何操作的目的,因为关闭命令在那时不可用

我可能忽略了一些事情,但我似乎没有注意到。 有谁能告诉我处理这种情况的方法吗

NB:如果有人想知道,我在Windows演示文稿中工作。


为了进一步澄清,以下是对之前描述我的情况的答案之一的评论:

我试图做的是在另一个类中运行命令,该类是WPF窗口的公共成员。窗口已实例化并显示。我只想访问它的公共成员,以便为了方便起见,可以从另一个类操纵窗口。我的OtherClass.cs是一个处理控制台操作的类。控制台是位于MainWindow.xaml.cs中的自定义控件。当用户键入例如:/close时,我希望MainWindow.xaml关闭,但不仅仅是关闭,因为将来我希望添加更多功能


您仍然需要对象引用。您必须使用应用程序上下文来实现这一点

以下是您如何获得对已打开和关闭的任何类型窗口的引用列表:

    var windows = Application.Current.Windows.OfType<MainWindow>();
    foreach (var window in windows)
    {
        window.Close();
    }
var windows=Application.Current.windows.OfType();
foreach(windows中的var窗口)
{
window.Close();
}

您可以对它们调用任何其他方法,也可以搜索任何其他类型的窗口,但这就是您查找特定窗口的方式。

因此,作为良好的OOP,我会将这些命令移出MainWindow,因为它们似乎不是唯一的MainWindow。它们实际上是:MainWindow是当前唯一需要这些操作的窗口。但是如果你建议我可以改进一些东西,我会很高兴听到。我想我会让
OtherClass
进行解析,我也会让它公开一组公共事件-每个命令一个。我会从
OtherClass
订阅
main窗口
关闭窗口事件;谢谢你的建议,非常感谢。我从来没有想过那个应用程序。当前暴露了所有的窗口。但是,还有其他方法吗?我不相信有一种方法可以跨类调用这样的方法。您可以创建一个静态窗口关闭方法,并在类中有一个活动窗口列表,当调用该方法时,它将关闭列表中的所有窗口。这样,您就不需要对象引用,至少在从中调用的方法中是这样。