「MonoMac/Preferencesウインドウを付ける」の版間の差分
< MonoMac
ナビゲーションに移動
検索に移動
(ページの作成:「MonoMacでMacのアプリで定番のPreferences(設定画面)を実装する。 ==実装1== ===プロジェクトにPreferencesWindowを追加する=== *「...」) |
|||
48行目: | 48行目: | ||
なお、上記の例では[[モーダルウインドウ]]にはなっていないので注意すること。[[モーダルウインドウ]]にしたい場合は下記を参照して書き換える。 | なお、上記の例では[[モーダルウインドウ]]にはなっていないので注意すること。[[モーダルウインドウ]]にしたい場合は下記を参照して書き換える。 | ||
*[[MonoMac/モーダルウインドウを作成する]] | *[[MonoMac/モーダルウインドウを作成する]] | ||
+ | |||
+ | ==実装2== | ||
+ | 閉じるたびにDisposeさせた方がいいかも。実装1のように1つのインスタンスを保持している方法だと、前回の画面が途中から再開されたりするため、タブなどを利用している場合はそこから再開になる。好みの問題かもしれない。 | ||
+ | <source lang="csharp"> | ||
+ | public partial class AppDelegate : NSApplicationDelegate | ||
+ | { | ||
+ | // 〜〜中略〜〜 | ||
+ | |||
+ | partial void ShowPreferencesWindow(NSObject sender) | ||
+ | { | ||
+ | using (var preferencesWindowController = new PreferencesWindowController()) | ||
+ | { | ||
+ | var ret = NSApplication.SharedApplication.RunModalForWindow(preferencesWindowController.Window); | ||
+ | Console.WriteLine(ret); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
==関連項目== | ==関連項目== |
2015年2月4日 (水) 08:22時点における版
MonoMacでMacのアプリで定番のPreferences(設定画面)を実装する。
目次
実装1
プロジェクトにPreferencesWindowを追加する
- 「追加」→「新しいファイル」でファイル追加ダイアログを表示する。
- 「Cocoa Window with Controller」を選び、名前を「PreferencesWindow」にする(名前は何でもよい)。
PreferencesWindow.xibの基本設定をする
- Preferences.xibを開く(Interface Builderが起動する)
- ウインドウを選択した状態でアトリビュートインスペクターを開き、以下のチェックボックスを外す
- Visible At Launch
- Release When Close
- ついでにTitleも「○○環境設定」など分かりやすい名前に変えておくとよい
以上が終わったらInterface Builderを閉じる。
MainMenu.xibに操作を追加する
- MainMenu.xibを開く(Interface Builderが起動する)
- アシスタントエディターを開く
- ソースコード側で「AppDelegate.h」を開く
- デザイナー側で「MacCocoaApp」→「Preferences」を表示させ、キーボードのCtrlを押しながらマウスをソースコード側へドラッグする
- ダイアログが開くので以下のように設定する
- Connection → Action
- Name → ShowPreferencesWindow (メニュー項目が押されたときに呼ばれるメソッド名なので何でもよい)
以上が終わったらInterface Builderを閉じる。Interface Builderを閉じることでXamarin Studio側に対応するソースコードが自動的に生成される。
AppDelegate.csに処理を追加する
前述の操作でAppDelegate.csに部分メソッドが準備された状態になっているので中身を書いてやる。AppDelegate.csを開き、Xamarin Studioのテキストエディタ上で「partial」とタイピングすればインテリセンスが働き「 partial void ShowPreferencesWindow(NSObject sender)」などと出てくるはず。
public partial class AppDelegate : NSApplicationDelegate
{
// 〜〜中略〜〜
PreferencesWindowController preferencesWindowController;
partial void ShowPreferencesWindow(NSObject sender)
{
if (preferencesWindowController == null)
{
preferencesWindowController = new PreferencesWindowController();
}
preferencesWindowController.ShowWindow(this);
}
}
なお、上記の例ではモーダルウインドウにはなっていないので注意すること。モーダルウインドウにしたい場合は下記を参照して書き換える。
実装2
閉じるたびにDisposeさせた方がいいかも。実装1のように1つのインスタンスを保持している方法だと、前回の画面が途中から再開されたりするため、タブなどを利用している場合はそこから再開になる。好みの問題かもしれない。
public partial class AppDelegate : NSApplicationDelegate
{
// 〜〜中略〜〜
partial void ShowPreferencesWindow(NSObject sender)
{
using (var preferencesWindowController = new PreferencesWindowController())
{
var ret = NSApplication.SharedApplication.RunModalForWindow(preferencesWindowController.Window);
Console.WriteLine(ret);
}
}
}