Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
C# 用monomac/c实例化一个附加窗口#_C#_Objective C_Xcode_Mono_Monomac - Fatal编程技术网

C# 用monomac/c实例化一个附加窗口#

C# 用monomac/c实例化一个附加窗口#,c#,objective-c,xcode,mono,monomac,C#,Objective C,Xcode,Mono,Monomac,我一直在寻找这个问题的答案,虽然我意识到这个问题可能很琐碎,但不知怎么的,我还是找不到答案 我需要显示第二个窗口(如果有必要的话,从单击菜单项启动)。我非常清楚如何使用winforms实现这一点,但我不确定monomac/NSWindow的等效物是什么。我需要这样做: MyWindowClass myWindow = new MyWindowClass(); myWindow.Show(); 关于这个问题,我能找到的最好的信息是,以下几点应该有用: MyWindowClass myWindow

我一直在寻找这个问题的答案,虽然我意识到这个问题可能很琐碎,但不知怎么的,我还是找不到答案

我需要显示第二个窗口(如果有必要的话,从单击菜单项启动)。我非常清楚如何使用winforms实现这一点,但我不确定monomac/NSWindow的等效物是什么。我需要这样做:

MyWindowClass myWindow = new MyWindowClass();
myWindow.Show();
关于这个问题,我能找到的最好的信息是,以下几点应该有用:

MyWindowClass myWindow = new MyWindowClass();
myWindow.MakeKeyAndOrderFront(this);
但当我尝试这样做时,它告诉我MyWindowClass()需要重载,所以我查看构造函数,发现它需要一个IntPtr。我不知道还有什么更好的办法,我试着这样做:

MyWindowClass myWindow = new MyWindowClass(new IntPtr());
myWindow.MakeKeyAndOrderFront(this);
这段代码运行时不会出错,但在我尝试启动窗口时不会发生任何事情

我肯定我只是犯了一个愚蠢的错误,但我就是找不到关于这个问题的任何东西。任何帮助都将不胜感激

编辑:以下是构造器的相关部分,以供参考:

public MyWindowClass (IntPtr handle) : base (handle)
    {
        Initialize ();
    }
其他信息:我正在尝试使用以下方法从AppDelegate.cs中运行上述代码:

partial void showWindow (MonoMac.Foundation.NSObject sender){
        MyWindowClass myWindow = new MyWindowClass(new IntPtr());
        myWindow.MakeKeyAndOrderFront(this);
    }
还有更多的代码:

public partial class ViewPaths : MonoMac.AppKit.NSWindow
{
    #region Constructors
    public ViewPaths ()
    {
        Initialize();
    }

    // Called when created from unmanaged code
    public ViewPaths (IntPtr handle) : base (handle)
    {
        Initialize ();
    }

    // Called when created directly from a XIB file
    [Export ("initWithCoder:")]
    public ViewPaths (NSCoder coder) : base (coder)
    {
        Initialize ();
    }

    // Shared initialization code
    void Initialize ()
    {
    }

    #endregion
}
然后是实际的实例化:

public partial class AppDelegate : NSApplicationDelegate
{
    MainWindowController mainWindowController;
    ViewPaths display;
    public AppDelegate ()
    {
    }

    public override void FinishedLaunching (NSObject notification)
    {
        mainWindowController = new MainWindowController ();
        mainWindowController.Window.MakeKeyAndOrderFront (this);
    }


    partial void viewPaths (MonoMac.Foundation.NSObject sender){
        display = new ViewPaths();
        display.MakeKeyAndOrderFront(this);
    }

}
}


这显示了一个没有任何类型UI元素的窗口。

只需添加一个没有handle参数的默认构造函数即可。确保MyWindowClass子类NSWindow并且它应该工作


此外,您可能需要保留对myWindow的引用,这样它就不会被垃圾收集。

为了清楚起见,如果有人用谷歌搜索过,下面是解决问题的最终代码:

由于我已使用控制器创建了一个新的monomac窗口,因此我需要创建该控制器的一个实例,并显示控制器的窗口:

MyWindowController myWindow = new MyWindowController();
myWindow.Window.MakeKeyAndOrderFront(this);

这不需要一个没有handle参数的新构造函数,这个解决方案解决了我通过实例化不正确的东西而产生的问题。

这就是我所需要做的。非常感谢。我没有意识到我可以在monomac为我添加的构造函数之外再添加一个构造函数。实际上,这并没有达到预期的效果-它显示了一个窗口,但不是我的窗口。编辑原始注释以显示类。发现问题。我正在创建一个窗口实例,而不是windowController。一切都好。非常感谢。