Создание дополнительного окна с помощью monomac/ C#

Я всюду искал ответ на этот вопрос, и хотя я понимаю, что он, вероятно, очень тривиален, каким-то образом ответ ускользает от меня.

Мне нужно показать второе окно (запускается при нажатии на пункт меню, если это имеет значение). Я прекрасно знаю, как это сделать с 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);
    }

}

}

Это показывает окно без каких-либо элементов пользовательского интерфейса.

2 ответа

Решение

Просто добавьте конструктор по умолчанию без параметра handle. Убедитесь, что MyWindowClass подклассы NSWindow и он должен работать.

Кроме того, вам может понадобиться сохранить ссылку на ваше окно myWindow, чтобы оно не собирало мусор.

Для ясности, вот окончательный код, который решил проблему, если кто-нибудь еще гуглит это:

Так как я создал новое окно monomac с контроллером, мне нужно было создать экземпляр этого контроллера и показать окно контроллера:

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

Для этого не требовался новый конструктор без внедренного параметра дескриптора - это решение работало вокруг проблемы, которую я создал, создавая неправильную вещь.

Другие вопросы по тегам