「MonoMac/Preferencesウインドウを付ける」の版間の差分
< MonoMac
ナビゲーションに移動
検索に移動
(→実装2) |
|||
50行目: | 50行目: | ||
==実装2== | ==実装2== | ||
− | + | 実装1のように1つのインスタンスを保持している方法だと、前回の画面が途中から再開されたりするため、タブなどを利用している場合はそこから再開になる。好みの問題かもしれないが、常に新しい画面がお好みなら閉じるたびにDisposeさせた方がいいかもしれない。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
public partial class AppDelegate : NSApplicationDelegate | public partial class AppDelegate : NSApplicationDelegate |
2015年2月4日 (水) 08:23時点における最新版
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[編集 | ソースを編集]
実装1のように1つのインスタンスを保持している方法だと、前回の画面が途中から再開されたりするため、タブなどを利用している場合はそこから再開になる。好みの問題かもしれないが、常に新しい画面がお好みなら閉じるたびにDisposeさせた方がいいかもしれない。
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);
}
}
}