プログラミング演習Ⅲ(2023)

【課題7-07】配置練習

プロジェクトタイプC# WPFアプリケーション
プロジェクト名Prac_7_07
ソリューション名PET7
ターゲットフレームワーク.NET 6.0 (長期的なサポート)

※ 「WPFアプリ(.NET Framework)」ではないので注意せよ!

_に示すような,ボタンをクリックすると 「押したボタンは「押したボタンのラベル」という メッセージボックスを表示するアプリを作成せよ.

画面イメージ

レイアウトは_のよう4行4列のレイアウトにすること.

レイアウト
注意
  • GUI部品の名前やラベルの文言は必ず守ること(そうしないと採点ができないため).
  • この設問では ツールボックスを使わずに XAMLファイルを直接編集してウィンドウの定義を作成すること.

このGUIアプリは_に示す部品を備える.

画面項目表
名前種別機能初期値/文言備考
button1ボタン「りんご」ボタンりんごメッセージボックス表示ボタン - その1.
クリックすると以下の設定でメッセージボックスを表示する.

・メッセージ→「押したボタンは押したボタンのラベル
・タイトル→メッセージ
・ボタン構成→OKボタンのみ
・アイコン→

押したボタンのラベルは押したボタンの表示上の文言であり,このボタンの場合はりんごである.

【プロパティの指定】
Marginプロパティに3 3 3 3(上下左右3ピクセルの余白)を指定すること.
button2ボタン「ごりら」ボタンごりらメッセージボックス表示ボタン - その2.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
button3ボタン「らっぱ」ボタンらっぱメッセージボックス表示ボタン - その3.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
button4ボタン「ぱいなっぷる」ボタンぱいなっぷるメッセージボックス表示ボタン - その4.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
button5ボタン「るーれっと」ボタンるーれっとメッセージボックス表示ボタン - その5.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
button6ボタン「とり」ボタンとりメッセージボックス表示ボタン - その6.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
button7ボタン「りす」ボタンりすメッセージボックス表示ボタン - その7.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
button8ボタン「すいか」ボタンすいかメッセージボックス表示ボタン - その8.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
button9ボタン「かめん」ボタンかめんメッセージボックス表示ボタン - その9.
押したボタンのラベル以外はbutton1と同じ動作となる.また,プロパティの設定もbutton1と同様である.
(名前なし)ウィンドウ(メインウィンドウ)配置練習プロジェクト作成時に自動作成されるメインウィンドウ.

【プロパティの指定】
・サイズは幅400×高さ300とする.
背景色はデフォルトの白以外に設定する
・左記の「初期値/文言」の列とおり文言,つまりタイトルを指定する.

正しく実装できた場合,実行結果は_に示すような挙動となる12

実行結果

ヒント

  • この設問ではツールボックスを使わずにXAMLファイルを直接編集してウィンドウの定義を作成すること.
    • ツールボックスから部品をドラッグ&ドロップで配置すると,余計な設定が行われてしまい正しく画面を作ることができない.
複数の部品でイベントハンドラを使いまわす

複数の部品に同じイベントハンドラを設定する方法

  • この設問では,すべてのボタンにそれぞれ異なるイベントハンドラを設定することでも実装できるが, 1つのイベントハンドラを複数の部品で共有することでも実現できる
    • イベントハンドラを共有するには,以下のようにする.
      1. 1つめのボタンで普通にイベントハンドラを新規作成する.ここでは作成されたメソッド名を仮にbutton1_Clickとする.
      2. それ以外のボタンのClickイベントにすべてbutton1_Clickを指定する.
      • 画面右下の「プロパティ」ウィンドウで設定することもできるが,XAMLソースを直接編集した方が簡単である.
      • XAMLソース上で既存のイベントハンドラを設定するには,イベントハンドラを設定時のサジェストで作成済みのイベントハンドラを選択すればよい.
      • (もしくはXAMLソース上でClick="イベントハンドラ名"の部分を,すべてのButton要素の開始タグ内にコピー&ペーストする).

イベントハンドラ内でイベントの契機となった部品を特定する方法

  • イベントハンドラを複数のボタンで共有する場合「 どのボタンが押されたのか 」を判定する必要がある.
    • このためには イベントハンドラのメソッドの最初の引数senderを利用すればよい
    • イベントハンドラのメソッドの最初の引数senderには「 そのイベントを引き起こしたGUI部品 」が渡されている.
      • そのため,引数senderButtonにキャストすれば押されたボタンのオブジェクトを得ることができる(_).
      • あとは取得したボタンオブジェクトのContentプロパティを使えばどのボタンが押されたかを判定することができる.
sender引数の使い方
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
private void button1_Click(object sender, RoutedEventArgs e)
{
    // sender引数をボタンオブジェクトにキャストする.
    Button btn = (Button)sender;


    // ボタン btn の Content プロパティなどを使って,
    // どのボタンが押されたかを判定して処理を行う.
    // ...

}
複数の部品でイベントハンドラを使いまわす : 閉じる

  1. Apple社の都合により,iPhone,iPadなどのデバイスでは動画の再生はできません(Apple社はスマートフォン/タブレット製品で,意図的?にVPxやAV1コーデックのサポートを遅らせているため.参考1参考2). ↩︎

  2. Microsoft Edge で動画を閲覧するためには,AV1 Extensionをインストールする必要があります. ↩︎

Last updated on 2023-11-22
Published on 2023-11-22

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.