メモ帳アプリ開発の「その4」になります。
アプリの上部にメニューバーを表示して、いろんな操作ができるようにしてみたいと思います。
【C#】メモ帳アプリ開発 ウインドウ上にメニューを設置 ファイル新規作成、アプリ終了などを実装
メニューバーの設定は、以前に以下の記事でも少し紹介しました。
【C#】フォームにメニューを表示する方法|メニューのアクセスキー&ショートカットを設定する方法も紹介
WindowsFormsでこのようなメニューを表示する方法を紹介します。 フォームにメニューを表示する方法 ツールボックスから「MenuStrip」を選択し、配置することで実現できます! 詳しくみてい ...
続きを見る
とりあえず、まずは赤枠のメニューを表示してみましょう。
※こちらは、Windows標準搭載のメモアプリの画面です。
MenuStripを配置してメニューを表示する
ツールボックスから「MenuStrip」を選択して、フォーム上に配置します。
とりあえずメニューっぽいのができました!
※まだ、ボタン押しても何も動作しませんが。
(F)とか(E)とかの入力方法などは、下記の関連記事にまとめてますのでそちらをご覧ください。
【C#】フォームにメニューを表示する方法|メニューのアクセスキー&ショートカットを設定する方法も紹介
WindowsFormsでこのようなメニューを表示する方法を紹介します。 フォームにメニューを表示する方法 ツールボックスから「MenuStrip」を選択し、配置することで実現できます! 詳しくみてい ...
続きを見る
メニュー「ファイル」の中身を実装していこう!
ここでは、メニューのなかから「ファイル」を実装してきたいと思います。
※全てやっていると大量になってしまうので、抜粋して。
ファイルメニューを開くとこんな感じです。
ファイルメニューの中身です。
- 新規
- 新しいウィンドウ
- 開く
- 上書き保存
- 名前を付けて保存
- ページ設定
- 印刷
- メモ帳の終了
この中から、2つピックアップして実装してみたいと思います。※黄色マーカーがついてるやつ。
メニューを追加してみました。
作成・入力方法は、(先ほどもでてきた)こちらの関連記事を参考にしてみてください。
※(Ctrl+N)などのショートカットキーの入力方法も記載しています。
【C#】フォームにメニューを表示する方法|メニューのアクセスキー&ショートカットを設定する方法も紹介
WindowsFormsでこのようなメニューを表示する方法を紹介します。 フォームにメニューを表示する方法 ツールボックスから「MenuStrip」を選択し、配置することで実現できます! 詳しくみてい ...
続きを見る
ちなみに、「開く」と「メモ帳の終了」の間の線は「ハイフン(-)」を入力すればOKです。
【1つ目】メニュー「新規(N)」の実装方法
【概要】メニュー「新規(N)」の実装方法
それでは、1つ目の「新規(N)」の実装方法を紹介します。
新規なので、「今入力されているテキストを破棄してまっさらなメモ帳にしてあげる」という感じの動作になります。
ここで気を付けたいのが以下。
- ファイルが未保存の場合は、警告表示する。
→ 保存する or 保存しないを選択させる
ファイル保存してないのに、何の通知もせずにまっさらにされたのでは、ユーザーとしてはちょっと不親切だな!と感じてしまいます。
ユーザーにやさしい作り、を心掛けていきましょう!(←これ、かなり大切です)
ファイルの保存・未保存を覚えておく
先ほどの、「未保存の場合は警告表示する」を実現するために、以下のようにします。
- 「未保存か?保存済みか?」を覚えておくために、1つプロパティーを用意。
※実現方法は色々あると思いますが、ここでは簡単に。
1 2 3 4 | /// <summary> /// 保存済みか否かを表すフラグ(true:保存済み、false:未保存)。 /// </summary> private bool _isSaved; |
コンストラクタで「true」にしておき、以降は新しいテキストが入力されたら「false」に更新してあげます。
そして、保存された時点で再び「true」に設定、という感じに使います。
テキスト入力されたら、未保存へ更新
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /// <summary> /// TextBoxのTextChangedイベント。 /// </summary> /// <param name="sender">イベント発生元。</param> /// <param name="e">イベントデータ。</param> private void TextBox_TextChanged(object sender, EventArgs e) { // ステータスバーに文字数を表示する。 string text = string.Format("文字数 {0}", this.textBox.Text.Length); this.toolStripStatusLabelCount.Text = text; // テキストが更新された。未保存へ更新。 this._isSaved = false; } |
※保存処理は未実装なので、ここではテキスト入力でのフラフ更新のみ記載。
新規入力時の処理|未保存の場合に警告表示する方法
Windowsメモ帳での新規作成時の警告表示
上記のような警告(というか、保存をうながすメッセージ)を表示してみたいと思います。
ここだと「無題への変更内容を保存しますか?」と書いてるので、ファイル名も覚えておく必要がありますね。
※ちょっと面倒なのでここでは省略したいと思います。まぁ同じようにプロパティ追加して「保存したファイル名 or 未保存なら無題」という名前をおぼえておけばOKですが。
ソースコード(新規作成ボタンクリック時の処理)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /// <summary> /// 「ファイル」→「新規作成」クリック時の処理。 /// </summary> /// <param name="sender">イベント発生元。</param> /// <param name="e">イベントデータ。</param> private void NewFileToolStripMenuItem_Click(object sender, EventArgs e) { // ファイル未保存の場合は警告表示する。 if (this._isSaved == false) { DialogResult result = MessageBox.Show("変更内容を保存しますか?", "メモ帳", MessageBoxButtons.YesNoCancel); if (result == DialogResult.Yes) { // 保存する場合 // 保存処理+新規作成の処理をする。 } else if (result == DialogResult.No) { // 保存しない場合 // 新規作成の処理をする。 } else { // キャンセルの場合 // 新規作成自体をキャンセルする。→何もしない。 } } } |
※実際の中身の処理は、まだ空のままです。
これで実行してみてください。適当に文字入力して、ファイル→新規作成、で以下のようなメッセージが表示されるようになりました。
フォームが画面中央に表示されない人はこちらも参照してみてね
【C#】画面(フォーム)をを画面の中央に表示する方法&任意の位置に表示する方法
以下のように、作成したプログラムを実行したけど画面中央に表示されない! という場合の解決法です。 ※画面の中央に表示する方法、画面の任意の位置に表示する方法についてです。 フォームを画面中央に表示する ...
続きを見る
新規作成でTextBoxの入力内容をクリアする
先ほどの「else if」文を以下のようにしてみました。
1 2 3 4 5 6 7 8 | else if (result == DialogResult.No) { // 保存しない場合 // 新規作成の処理をする。 this.textBox.Text = string.Empty; this._isSaved = true; } |
新規作成でTextBoxの中身を空にし、フラフを更新。
とりあえずこれで新規作成となりました。
※保存処理は長くなりそうなので、ここでは省略させてもらいます…。すいません。
【2つ目】メニュー「メモ帳の終了(X)」の実装方法
こんな感じにしてみたいと思います。
- メモ帳が未保存の場合は、終了してよいか確認メッセージを表示する。
- メモ帳保存済みの場合は、即終了
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /// <summary> /// 「ファイル」→「メモ帳アプリを終了」のクリック処理。 /// </summary> /// <param name="sender">イベント発生元。</param> /// <param name="e">イベントデータ。</param> private void ToolStripMenuItemExit_Click(object sender, EventArgs e) { if (this._isSaved == false) { DialogResult result = MessageBox.Show("メモ帳の内容が保存されていません。\r\n保存せずにメモ帳アプリを終了してもよろしいですか?", "メモ帳", MessageBoxButtons.YesNo); if (result == DialogResult.No) { // まだ終了しない。 return; } } // メモ帳アプリを終了。 this.Close(); } |
「This.Close」でアプリを終了させます。
その前に、ファイル保存済みかのフラグをチェックし、未保存の場合はメッセージ表示しています。
「ユーザーに終了してよいか?」を問い、良ければ終了という流れです。
まとめ
本記事では、「 ウインドウ上にメニューを設置」してみました。
新規作成やアプリ終了など、簡単な実装を通して、メニューの使用方法を学びました。
それでは!