我一直在寻找这个问题的答案,虽然我意识到这可能非常微不足道,但不知怎的,答案却让我难以捉摸。
我需要显示第二个窗口(从单击菜单项启动,如果这很重要)。我非常清楚如何使用 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 元素的窗口。