3

私はこの質問に対する答えをずっと探していましたが、それがおそらく非常に些細なことであることに気づきましたが、どういうわけか答えがわかりません.

2 番目のウィンドウを表示する必要があります (問題がある場合は、メニュー項目をクリックして起動します)。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 要素もないウィンドウを示しています。

4

2 に答える 2

2

handle パラメーターを指定せずにデフォルトのコンストラクターを追加するだけです。MyWindowClass が NSWindow をサブクラス化し、動作することを確認してください。

また、ガベージ コレクションが行われないように、myWindow への参照を維持する必要がある場合もあります。

于 2013-01-17T23:09:47.917 に答える
2

明確にするために、問題を解決した最終的なコードを次に示します。他の誰かがこれをグーグルで検索した場合:

コントローラーを使用して新しい monomac ウィンドウを作成したので、そのコントローラーのインスタンスを作成し、コントローラーのウィンドウを表示する必要がありました。

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

これには、ハンドル パラメータが実装されていない新しいコンストラクタは必要ありませんでした。その解決策は、間違ったものをインスタンス化することによって作成した問題を回避していました。

于 2013-01-18T00:59:08.630 に答える