C# 用monomac/c实例化一个附加窗口#
我一直在寻找这个问题的答案,虽然我意识到这个问题可能很琐碎,但不知怎么的,我还是找不到答案 我需要显示第二个窗口(如果有必要的话,从单击菜单项启动)。我非常清楚如何使用winforms实现这一点,但我不确定monomac/NSWindow的等效物是什么。我需要这样做: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
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。一切都好。非常感谢。