在MonoMac中打开Cocoa窗口

本文关键字:Cocoa 窗口 MonoMac | 更新日期: 2023-09-27 17:58:23

我正试图完成打开一个新窗口的简单任务,但我似乎完全无法做到

我在Mac上使用MonoMac和monojc。当创建一个新的monojc项目时,会创建一个MainMenu.xib。我已经设法使用XCode编辑器将控件和绑定添加到此文件。此窗口在应用程序启动时自动打开。

然而,当我试图创建一个新窗口时,我根本无法让它显示出来。我通过右键单击MainMenu.xib的父文件夹,然后单击Addfile=>Cocoa窗口模板创建了一个.xib文件。这个文件可以在XCode中编辑,只需一个MainMenu.xib.

然后,我继续创建一个继承NSWindowController的类,并在.xib文件中选择该类作为窗口的"文件所有者"。然后我就能够设计窗口,并为控制器添加出口和动作。

但是我不知道怎么打开窗户。我已经尝试了多种变体:

var f = new RegularLoginForm(); //which inherits NSWindowController
f.LoadWindow(); //I have tried without this line
f.ShowWindow(null); // I have also tried sending in the AppDelegate object (which is the controller for MainMenu.xib)

但似乎什么都不起作用——也就是说,窗户永远不会打开。有什么建议吗?

编辑:这是我的.xib及其配置的屏幕截图:https://dl.dropbox.com/u/1545094/so_nswindowcontroller.png

在MonoMac中打开Cocoa窗口

您在Window.xib中将RegularLoginForm设置为文件的所有者;但是您是否也将文件所有者的窗口出口连接到界面生成器中的窗口?

即右键单击IB中的文件所有者,然后单击并将窗口出口拖动到窗口对象

此外,我尝试了你的代码,对我来说,它在呼叫时崩溃了

f.ShowWindow(null)

[ERROR]致命未处理异常:System.ArgumentNullException:参数不能为null。参数名称:发送方

如果我指定发送者参数,它运行良好,例如

f.ShowWindow(this)

然而,我的环境只是MonoMac;no monobjc(我不确定你是如何或为什么同时使用这两者的?);YMMV也是如此。