差分
編集の要約なし
[[MonoMac]]および[[Xamarin.Mac]]で[[モーダルウインドウ]]を表示する。
==実装例1概要==[[Mac OS X]]では一般的に[[Windows]]風の「[[モーダルウインドウ]]」ではなく「[[シート]]」(親ウインドウに固定されたモーダルウィンドウ)を使うらしい。シートは親ウインドウに張り付くため、どれか親ウィンドウなのか明確なのでウインドウ開きすぎなグダグダな環境では良いとされている。 しかしながらが、特定業務専用機と化している[[Mac]]では親ウインドウを見ながら項目入力したいのとの苦情が殺到した。そのためWindows風のモーダルウインドウを実現する方法を模索した。 ==実装1==
===戻り値の準備===
[[モーダルウインドウ]]の[[戻り値]]用に[[WinForms]]のDialogResult風に[[列挙体]]を用意しておくと[[可読性]]が向上する気がする。<source lang="csharp">
// モーダルウインドウの戻り値用
public enum ModalResult
===親ウインドウから子ウインドウを呼び出す===
===子ウインドウを閉じる===
public partial class SubWindowController : MonoMac.AppKit.NSWindowController
{
}
</source>
なお、NSApplication.SharedApplication.StopModalWithCodeメソッドはウインドウのモーダル化が解除されるだけでウインドウ自体は閉じない。ボタンなどを押されたときにモーダルウインドウを閉じる場合にはthis.Window.Closeを呼んでやると良いようだ。
=== 表示してみる ===
<syntaxhighlight lang="csharp">
// ダイアログ生成
var dialog = new SubWindowController();
// LoadWindowでawakeNibなどの初期化処理が呼ばれる
dialog.LoadWindow();
// ウインドウを最前面にしておく(不要かもしれない)
dialog.Window.MakeKeyAndOrderFront(this);
// モーダル表示実行
NSApplication.SharedApplication.RunModalForWindow(dialog.Window);
</syntaxhighlight>
==関連項目==
[[category:MonoMac]]
[[category:Xamarin.Mac]]