C#でプログラムを始めてみる連載の13回目です。前回の記事はコチラです。 hirocom777.hatenadiary.org
まとめた処理を使う
前回はファイルを開く処理と保存する処理をそれぞれまとめてみました。こうしておくと後々のプログラミングが楽になります。
今回は、これらの処理を使って機能を追加してみましょう。
ファイルを開く前に編集状態を保存するかどうか聞く
前回メニューのOpenを選択し場合の処理を書き換えましたが、これには編集中の状態の場合に保存するかどうか聞く処理がありません。編集中の状態の場合には保存するかどうかを聞いて、必要であれば保存するようにしましょう。メニューのOpenのコードを以下の様にしました。
private void mnuOpen_Click(object sender, EventArgs e) { if (fileChange) { var result = MessageBox.Show("ファイルを保存しますか?", "TextEditor", MessageBoxButtons.YesNoCancel); if (result == DialogResult.Yes) { SaveFile(fileName); } if (result == DialogResult.Cancel) { return; } } OpenFile(); }
ファイルを開く前に編集フラグfileChangeを確認してtrueの場合には保存するかどうかを聞くようにしました。結果がはいの場合には保存処理を実行します。キャンセルの場合には保存もファイルを開く処理も実行しません。いいえの場合は保存処理をせずにファイルを開きます。
メッセージボックス
メッセージボックスを使うにはMessageBoxクラスを使用します。実際のメッセージボックス表示はMessageBox.Showメソッドで実施します。使い方は以下の様になります。
MessageBox.Show(メッセージ,タイトル,ボタン表示の指定);
メッセージとタイトルは文字列で指定、ボタン表示はMessageBoxButtons列挙体で指定します。列挙体とは、いくつかの定数をまとめて表現しやすくしたものです。今回の指定YesNoCancelは、はい、いいえ、キャンセルの3つのボタンを表示します。MessageBoxButtons列挙体で指定できるボタンの表示は以下の通りです。
メンバー | 値 | 表示されるボタン |
---|---|---|
OK | 0 | [OK] |
OKCancel | 1 | [OK] 、[キャンセル] |
AbortRetryIgnore | 2 | [中止]、[再試行]、[無視] |
YesNoCancel | 3 | [はい]、[いいえ]、[キャンセル] |
YesNo | 4 | [はい] 、[いいえ] |
RetryCancel | 5 | [再試行] 、[キャンセル] |
操作の結果はDialogResult列挙体で返されます。はいのボタンを押された場合はYes、いいえのボタンが押された場合はNo、キャンセルのボタンが押された場合はCancelが返されます。その他、押されたボタンによって返される値(DialogResult列挙体のメンバー)は、以下の通りです。
メンバー | 値 | 押されたボタン |
---|---|---|
OK | 1 | [OK] |
Cancel | 2 | [キャンセル] |
Abort | 3 | [中止] |
Retry | 4 | [再試行] |
Ignore | 5 | [無視] |
Yes | 6 | [はい] |
No | 7 | [いいえ] |
ところでMessageBoxクラスは、前回ご紹介したコモンダイアログとは少し使い方が違います。コモンダイアログはクラスからオブジェクトを作ってオブジェクトを操作して使用しましたが、MessageBoxクラスはオブジェクトを作ることなく使用できます。これは、MessageBoxクラスが静的クラスに設定されているからです。静的クラスはオブジェクトを作らずにクラス名自体を指定して使います。
違う名前で保存する
次に、ファイルを保存する場合に開いた時とは別の名前で保存する方法に対応しましょう。最初にメニューにSave As(名前を付けて保存)を追加します。まず、メニューを挿入する場所の下にあるメニュー(今回の場合はExit)を選択して右クリックます(①)。続いて、挿入からMenuItemを選択します(②)。
すると、新しいメニューが挿入されますのて、表示をSave Asとしましょう(③)。
他のメニューと同様に、プロパティウィンドウでプロパティ(Name)を選択して、名前をmnuSaveAsと変更します。また、ショートカットキーはCtrl+Shift+Sとしましょう。
割り当てるコードは以下の様になります。 Save As をダブルクリックして入力しましょう。
private void mnuSaveAs_Click(object sender, EventArgs e) { SaveFile(); }
SaveFileは、ファイル名を引数に指定しないとファイル名を指定するコモンダイアログを開いてファイル名の指定を促します。 F5キーを押して、実行して確認してみましょう。メニューSave Asを選択すると、何かファイルを開いている状態でもコモンダイアログが表示されるようになりました。
あともう少し!!
いかがでしょうか?ちょっと本格的なツールになってきましたよね。次回は残りの処理です。編集中の状態でテキストエディターを閉じるときですね。お楽しみに!!