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

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

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

#3. やったこと
下のサイトの 6.コントロールを学習
http://kaitei.net/csforms/

#4. 配信時の録画
https://www.youtube.com/watch?v=CXvNHd2x7gM

※動画のチャプターはコメント欄の固定コメントを参照ください。

#5. 今回学んだこと
今回はちゃんと参考サイトの内容中心に学んだよ！
記事には参考サイトに記載していないところで学びのあった所をまとめます。

#6. 配列について
6章 「2. ボタンの復習」にてC# の配列を学んだよ。

##6.1 配列の宣言
C/C++と違い、配列をの後に"[]"をつけ配列の宣言を行い、配列要素の型と要素の数を指定する new 演算子を用いて要素数を指定します。

```C#:例
int[] array = new int[5];
```
参考サイトでは組み込み型ではなく、``button[]``を用いてボタンクラスの配列を宣言していました。

## 6.2 配列の初期化
組み込み型の配列の初期化を行う場合は、C/C++とほぼ同じ

```C#:初期化例1（組み込み型）
int[] array = { 1, 3, 5, 7, 9 };
```

```C#:初期化例2（組み込み型）
int[] array;
array = new int[] { 1, 3, 5, 7, 9 }; ;
```

参考サイトではボタンクラスで宣言した配列の各要素に、それぞれ初期化内でプロパティ設定、イベントハンドラ設定を行っていた

```C#:初期化例3（ボタンクラス使用）
        button[0] = new Button()
        {
            Text = "ボタン A",
            TabIndex = 0,  // フォーカスの移る順位 0 (最優先)
            Location = new Point(10, 10),
            UseVisualStyleBackColor = true,  // ビジュアルスタイル
        };
        button[0].Click += new EventHandler(button_Click);
```
#7. 名前空間について
他のファイルで宣言したクラスは、名前空間が違うと参照できないことを学んだ。
※　配信アーカイブ動画　38:30～のようなエラーがビルド時に出る

```C#:エラーとなった[program.cs]
class Program
{
// ... 略
        // Form1()はForm1.csで宣言されている
        // namespace は　WindowsFormApp4
        Application.Run(new Form1());
}
// ... 略
```

##7.1 名前空間が違う場所のクラスを参照する方法
以下3通りの解決方法がある

* 参照したいクラスと同じnamespaceにする

[program.cs]の` class Program` 前に`namespace WindowsFormApp4`をつけてあげれば、参照したいクラスと同じ名前空間となる為、ビルドエラーが出なくなる。

```C#:解決方法1
// class Programの配置先を、Form1()と同じ名前空間とする
namespace WindowsFormApp4
class Program
{
// ... 略
        Application.Run(new Form1());
}
// ... 略
```

* usingを用いる

[program.cs]のusingステートメントで、参照したいクラスの名前空間を記載すればOK

```C#:解決方法2
// usingで参照したいクラスの名前空間を書くことで、Form1()を名前空間情報無しに使用できる
using WindowsFormApp4
// ... 略
class Program
{
// ... 略
        Application.Run(new Form1());
}
// ... 略
```

* 参照したいクラス名の前に、名前空間情報を記載する

参照したいクラスの前に、名前空間情報を足してあげればビルドが通る

```C#:解決方法3
// ... 略
class Program
{
// ... 略
        // WindowsFormApp4をForm1()の前に追記した
        Application.Run(new WindowsFormApp4.Form1());
}
// ... 略
```

こんな感じで、クラスを参照する際は名前空間にも気を付けるべきと学んだ

#8. ピクチャーボックスを用いたファイル表示について
##8.1 画像が意図した表示にならない

参考サイト　6章　4．「ピクチャボックス」のサンプルコードをそのまま使ってビルドした際、<font color="red">絵が左上に小さく表示されてしまう！！</font>
本当は画面全体に画像を表示したかったのに；；

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/11b57880-a5fb-8d73-7ee8-632a247dda4d.png)

##8.2　解決方法

ピクチャボックスのインスタンス化を行う際、プロパティの1つ「Dock」プロパティにFillを設定すればOK

```C#:DockプロパティにFillが設定されるコード
// ... 略
Dock = DockStyle.Fill,
// ... 略
```
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/87c9f0bd-f5c1-a9d5-271b-d796fa340065.png)

無事画像をWindowの全領域を使って表示できた

#9. 文字列指定時の”＠”について
ピクチャボックスを利用する際、ファイルをローカルPATHを記載して参照する。
その際、PATHの先頭に”＠”がないと、コンパイラが文字列中の「\」を別の意味と解釈してエラーを出してしまう。

”＠”以降は唯の文字列だよとコンパイラに伝えるために使用する。

```C#:”＠”を使っている箇所
// ... 略
bitmap = new Bitmap(@"C:\test\sample.bmp");
// ... 略
```

----------------

#10. 最後に
以上。第三回の勉強会で学んだことの振り返り（参考サイトの内容以外）でした～。

第四回も10月24日(日）の夜8時から以下チャンネルで行います！

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

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

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