【課題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とする. ・背景色はデフォルトの白以外に設定する. ・左記の「初期値/文言」の列とおり文言,つまりタイトルを指定する.  | 
正しく実装できた場合,実行結果は_に示すような挙動となる1,2.
ヒント
- この設問ではツールボックスを使わずにXAMLファイルを直接編集してウィンドウの定義を作成すること.
- ツールボックスから部品をドラッグ&ドロップで配置すると,余計な設定が行われてしまい正しく画面を作ることができない.
 
 
複数の部品でイベントハンドラを使いまわす
複数の部品に同じイベントハンドラを設定する方法
- この設問では,すべてのボタンにそれぞれ異なるイベントハンドラを設定することでも実装できるが, 1つのイベントハンドラを複数の部品で共有することでも実現できる .
- イベントハンドラを共有するには,以下のようにする.
- 1つめのボタンで普通にイベントハンドラを新規作成する.ここでは作成されたメソッド名を仮に
button1_Clickとする. - それ以外のボタンの
Clickイベントにすべてbutton1_Clickを指定する. 
- 画面右下の「プロパティ」ウィンドウで設定することもできるが,XAMLソースを直接編集した方が簡単である.
 - XAMLソース上で既存のイベントハンドラを設定するには,イベントハンドラを設定時のサジェストで作成済みのイベントハンドラを選択すればよい.
 - (もしくはXAMLソース上で
Click="イベントハンドラ名"の部分を,すべてのButton要素の開始タグ内にコピー&ペーストする). 
 - 1つめのボタンで普通にイベントハンドラを新規作成する.ここでは作成されたメソッド名を仮に
 
 - イベントハンドラを共有するには,以下のようにする.
 
イベントハンドラ内でイベントの契機となった部品を特定する方法
- イベントハンドラを複数のボタンで共有する場合「 どのボタンが押されたのか 」を判定する必要がある.
- このためには イベントハンドラのメソッドの最初の引数
senderを利用すればよい . - イベントハンドラのメソッドの最初の引数
senderには「 そのイベントを引き起こしたGUI部品 」が渡されている.- そのため,引数
senderをButtonにキャストすれば押されたボタンのオブジェクトを得ることができる(_). - あとは取得したボタンオブジェクトの
Contentプロパティを使えばどのボタンが押されたかを判定することができる. 
 - そのため,引数
 
 - このためには イベントハンドラのメソッドの最初の引数
 
 |  | 
複数の部品でイベントハンドラを使いまわす : 閉じる
Apple社の都合により,iPhone,iPadなどのデバイスでは動画の再生はできません(Apple社はスマートフォン/タブレット製品で,意図的?にVPxやAV1コーデックのサポートを遅らせているため.参考1,参考2). ↩︎
Microsoft Edge で動画を閲覧するためには,AV1 Extensionをインストールする必要があります. ↩︎

