「Xamarin.Macでモーダルウインドウを作成する」の版間の差分
imported>Administrator 細 Administrator がページ「MonoMac/モーダルウインドウを作成する」を「Xamarin.Macでモーダルウインドウを作成する」に移動しました |
imported>Administrator 編集の要約なし |
||
| 2行目: | 2行目: | ||
==概要== | ==概要== | ||
[[Mac OS X]]では一般的に[[Windows]] | [[Mac OS X]]では一般的に[[Windows]]風の「[[モーダルウインドウ]]」ではなく「[[シート]]」(親ウインドウに固定されたモーダルウィンドウ)を使うらしい。シートは親ウインドウに張り付くため、どれか親ウィンドウなのか明確なのでウインドウ開きすぎなグダグダな環境では良いとされている。 | ||
しかしながらが、特定業務専用機と化している[[Mac]] | しかしながらが、特定業務専用機と化している[[Mac]]では親ウインドウを見ながら項目入力したいのとの苦情が殺到した。そのためWindows風のモーダルウインドウを実現する方法を模索した。 | ||
==実装1== | ==実装1== | ||
===戻り値の準備=== | ===戻り値の準備=== | ||
[[モーダルウインドウ]]の[[戻り値]]用に[[WinForms]]のDialogResult風に[[列挙体]]を用意しておくと[[可読性]]が向上する気がする。 | [[モーダルウインドウ]]の[[戻り値]]用に[[WinForms]]のDialogResult風に[[列挙体]]を用意しておくと[[可読性]]が向上する気がする。<source lang="csharp"> | ||
<source lang="csharp"> | |||
// モーダルウインドウの戻り値用 | // モーダルウインドウの戻り値用 | ||
public enum ModalResult | public enum ModalResult | ||
| 20行目: | 19行目: | ||
===親ウインドウから子ウインドウを呼び出す=== | ===親ウインドウから子ウインドウを呼び出す=== | ||
[[ | [[Xamarin.Mac]]で[[モーダルウインドウ]]を表示するには「NSApplication.SharedApplication.RunModalForWindowメソッド」を使うようだ。親ウインドウは勝手に認識されている? | ||
===子ウインドウを閉じる=== | ===子ウインドウを閉じる=== | ||
子ウインドウを閉じるには「NSApplication.SharedApplication.StopModalWithCodeメソッド」を使うようだ。このメソッドを呼ばずに子ウインドウを閉じると親ウインドウに制御が戻らないので注意すること。 | |||
この例では子ウインドウが普通に「×ボタン」で閉じる際に「ModalResult.OK」を返している。ダイアログ風にするのであればOKボタンやキャンセルボタンを用意して、それらが押した際にNSApplication.SharedApplication.StopModalWithCodeメソッド呼ぶとよいようだ。<source lang="csharp"> | |||
<source lang="csharp"> | |||
public partial class SubWindowController : MonoMac.AppKit.NSWindowController | public partial class SubWindowController : MonoMac.AppKit.NSWindowController | ||
{ | { | ||
| 64行目: | 41行目: | ||
</source> | </source> | ||
なお、NSApplication.SharedApplication. | なお、NSApplication.SharedApplication.StopModalWithCodeメソッドはウインドウのモーダル化が解除されるだけでウインドウ自体は閉じない。ボタンなどを押されたときにモーダルウインドウを閉じる場合にはthis.Window.Closeを呼んでやると良いようだ。<source lang="csharp"> | ||
<source lang="csharp"> | |||
ModalResult _result = ModalResult.Cancel; | ModalResult _result = ModalResult.Cancel; | ||