プログラム初心者勉強会　5回目　-C# Windowsフォーム入門

#目次
[1. 前回リンク](#1-前回リンク)
[2. 次回リンク](#2-次回リンク)
[3. やったこと](#3-やったこと)
[4. 配信時の録画](#4-配信時の録画)
[5. 今回学んだこと](#5-今回学んだこと)
[6. リソースの追加について](#6-リソースの追加について)
[7. リソースの活用](#7-リソースの活用)
[8. ダイアログの勉強](#8-ダイアログの勉強)
[9. デザイン画面から生成したイベントハンドラ関数を削除する手順](#9-デザイン画面から生成したイベントハンドラ関数を削除する手順)
[10. 振り返り](#10-振り返り)
[11. 次回予告](#11-次回予告)

#1. 前回リンク
https://qiita.com/Usyuuu-program-beginner/items/ef0d6aad24ad3bdeb5e2

#2. 次回リンク
https://qiita.com/Usyuuu-program-beginner/items/cc17e799bc0538902ffd

#3. やったこと
下のサイトの 8.リソース と 9. ダイアログ(1)を学習

http://kaitei.net/csforms/

ダイアログに関しては、以下サイトの内容を主に勉強

https://nomux2.net/original-dialog/


#4. 配信時の録画
https://youtu.be/hDGb4d9oD68

#5. 今回学んだこと
リソースの内容を自学習してしまってたので、9章も勉強したよ。
記事には参考サイトに記載していないところで学びのあった所をまとめます。

#6. リソースの追加について
##6.1 プロパティ画面の開き方
2通り存在する

* 「Resources.resx」ファイルの使用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/8452ab3a-a9c5-3940-761a-0f4372aa3d8d.png)
ソリューション エクスプローラ画面から「Resources.resx」をダブルクリックすることで、プロジェクトのプロパティ画面が開けます。

* プロジェクト名を右クリック　→　「プロパティ(R)」を選択

手順は[前回記事](https://qiita.com/Usyuuu-program-beginner/items/ef0d6aad24ad3bdeb5e2)の7.1章を参照

##6.2　画像データの追加
[前回記事](https://qiita.com/Usyuuu-program-beginner/items/ef0d6aad24ad3bdeb5e2)の7.1章を参照

##6.3　アイコンの追加
1. [5.1 プロパティ画面の開き方](#51 プロパティ画面の開き方)の方法でプロパティ画面に行く
2. 下画像の「アイコン Ctrl +3」を選択
3. 「リソースの追加(R)」で” ？？？.ico ”ファイルを追加
![プロパティ_アイコン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/806cad56-245b-0ec2-a47a-7daace87624d.png)


:::note warn
注意
・　アイコンは「.ico」形式のファイルのみ登録可能です。
・　アイコンファイルの名前先頭に数字がある場合、ビルドに失敗する場合があります。英字にしておきましょう。
:::

##6.4 音楽データの追加
1. [5.1 プロパティ画面の開き方](#51 プロパティ画面の開き方)の方法でプロパティ画面に行く
2. 下画像の「オーディオ Ctrl +4 」を選択
3. 「リソースの追加(R)」で” ？？？.wav ”ファイルを追加
![プロパティ_オーディオ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/e739a955-2698-3929-dc80-7769a88ba520.png)

:::note warn
注意
・　オーディオファイルは「.wav」形式のファイルのみ登録可能です。
・　.mp3形式の場合、リソースの種別は「ファイル」となります。
:::

##6.5 文字列データの追加
1. [5.1 プロパティ画面の開き方](#51 プロパティ画面の開き方)の方法でプロパティ画面に行く
2. 下画像の「文字列 Ctrl +1 」を選択
3. 名前列に”変数名”、値列に”表示したい文字列”を記載する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/ba354ee9-803b-c786-ae20-473e62990b95.png)

#7. リソースの活用
##7.1 画像データの活用
[前回記事](https://qiita.com/Usyuuu-program-beginner/items/ef0d6aad24ad3bdeb5e2)の7.2章を参照

##7.2 アイコンデータの活用
###7.2.1 ウィンドウ左上のアイコン変更
以下サイトに手順記載あり。参考サイトでは直接コード記載して変更する手順書いてたけど、絶対こっちの方が簡単

https://johobase.com/windows-form-icon/

###7.2.2 実行ファイルのアイコン変更
1. プロパティ画面を開く
2. 「アプリケーション」タブメニュ―を開く
3. 画面下部の「アイコン：」右の「参照…」ボタンから、実行ファイルのアイコンに設定したい「？？？.ico」ファイルを選択
4. ビルドする

上記手順で実行ファイルのアイコンを変更可能

![アイコン変更.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/69c92477-2908-e1db-2c3c-e76dd38e3aea.png)

##7.3 音楽ファイルの再生
音楽再生に関しては以下記事が一番参考になった

https://qiita.com/Oichan/items/b93e8e8ba8211b925d0a

ここで解説しているように、wav形式なら`System.Media.SoundPlayer`を使用するだけで再生、停止が簡単にできます。

MP3形式は標準で使用できないので、[Small Basic](http://smallbasic.com/doc.aspx?o=Sound&l=ja)のdllを参照する方法が一番簡単そう。 .Net Framework上で動く設計で、dll参照さえすればすぐに使えるのがいいね！

##7.4 リソース追加した文字列の活用
メッセージボックスに表示する文字列をあらかじめ用意し、管理できたりする。（正直仕事でどのように活用できるかは詳しくわかってない）

以下のようなコードを書けば、メッセージボックスに文字列が表示できるよ

```C#:リソース追加した文字列を表示
//　5.5章でリソースに追加した文字列
string str = Properties.Resources.ShowUsyuuuText;
string str2 = Properties.Resources.strstr;
//　リソースに追加した文字列をメッセージボックスに表示
MessageBox.Show(str,str2);
```

#8. ダイアログの勉強
正直下のURLの内容を読めば、ダイアログの追加から情報の取得まで学べます。
ですがこのサイトのコードのままだと実装ができないので、そのあたり解説

https://nomux2.net/original-dialog/

##8.1 追加したダイアログを呼び出す
以下画面の「Dialog」ボタンを押すと、ダイアログが表示されるようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/28d82745-f26f-55cd-6655-90f4a98fdcb4.png)

ダイアログクリック時のイベントハンドラ関数に、参考サイト先のサンプルコードをそのまま書き込むとエラーになってしまう

![era-.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/392e3fef-0adf-9c28-7532-ad2da5a73a55.png)

##8.2 エラー原因
これの原因は「名前空間が違う場所のクラスを参照しているから」でした。
追加したダイアログ用関数の名前空間を、クラス前に記載することでエラーが無くなったよ。

```C#:エラーの出ないダイアログ呼び出し（DialogFormはダイアログ用クラスの名前空間）
private void button3_Click(object sender, EventArgs e)
{
     using (DialogForm.DialogSample dlg = new DialogForm.DialogSample())
     {
          if (dlg.ShowDialog() == DialogResult.OK)
          {
             //OKがクリックされた場合
             MessageBox.Show(dlg.GetTextInput());
          }
          else
          {
             //キャンセルがクリックされた場合
             MessageBox.Show("キャンセルされました。");
          }
    }
}
```

#9. デザイン画面から生成したイベントハンドラ関数を削除する手順
デザイン画面のボタンコントロールをダブルクリックすると、以下のようなイベントハンドラ関数が自動生成される。
![削除部分.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/8e167e88-c4f9-6331-b2b7-0a2df0dc3c92.png)

もしソースコードの該当関数を削除してしまうと、以下のようにデザイン画面にエラーが出てしまう
![ボタンクリックイベントハンドラを削除.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/633236ab-b286-437a-ba04-75dc8e0100c4.png)

これを回避するためには、以下手順で削除する必要があります。

1. デザイン画面を開き、イベントハンドラを削除したいコントロールを選択状態にする。
2. プロパティ画面の稲妻マークをクリックする
3. 選択コントロールに割り当てられたイベントを削除する
4. ソースコードからイベントハンドラ関数を削除する

![イベント用プロパティ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/98299b70-0b9f-6413-b4fc-b62bfef6d35c.png)

これでデザイン画面を開いてもエラーが出ません！

#10. 振り返り
リソースよりもダイアログ表示に今回は時間を割いちゃいました。次回もダイアログの勉強頑張るぞ！

#11. 次回予告
第6回は11月7日(日）の夜8時から以下チャンネルで行います！

##ニコニコ配信先
https://com.nicovideo.jp/community/co3601066

## Twitch配信先
https://www.twitch.tv/programing_study_meeting

## Discordリンク
https://discord.gg/7rcqhMGpvA