当前位置:首页 > 操作系统 > MacOs

使用monomac / c#实例化其他窗口

我一直在寻找这个问题的答案,虽然我意识到这可能很琐碎,但是答案却使我难以理解.

我需要显示第二个窗口(如果需要的话,单击菜单项即可启动).我完全知道如何使用winforms来做到这一点,但是我不确定monomac / NSWindow的含义是什么.我需要这样做:

<code>MyWindowClass myWindow = new MyWindowClass();
myWindow.Show();
</code>

我可以找到的关于该主题的最佳信息是,以下方法应该起作用:

<code>MyWindowClass myWindow = new MyWindowClass();
myWindow.MakeKeyAndOrderFront(this);
</code>

但是,当我尝试这样做时,它告诉我MyWindowClass()需要重载,因此我查看了构造函数,并发现它正在请求IntPtr.不知道更好,我尝试这样:

<code>MyWindowClass myWindow = new MyWindowClass(new IntPtr());
myWindow.MakeKeyAndOrderFront(this);
</code>

这段代码将正确运行,但是当我尝试启动窗口时什么也没有发生.

我敢肯定我只是在犯一个愚蠢的错误,但我只是无法在这个问题上找到任何东西.任何帮助将不胜感激.

编辑:供参考,这是构造函数的相关部分:

<code>public MyWindowClass (IntPtr handle) : base (handle)
    {
        Initialize ();
    }
</code>

附加信息:我正在尝试通过以下方法从AppDelegate.cs中运行以上代码:

<code>partial void showWindow (MonoMac.Foundation.NSObject sender){
        MyWindowClass myWindow = new MyWindowClass(new IntPtr());
        myWindow.MakeKeyAndOrderFront(this);
    }
</code>

甚至还有更多代码:

<code>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
}
</code>

然后是实际的实例化:

<code>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);
    }

}
</code>

}

这将显示一个没有任何UI元素的窗口.

解决方法:

只需添加不带handle参数的默认构造函数即可.确保MyWindowClass子类化NSWindow,并且它应该可以工作.

另外,您可能需要保留对myWindow的引用-以便不会收集垃圾.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐