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

#目次
[1. 前回リンク](#1-前回リンク)
[2. 次回リンク](#2-次回リンク)
[3. やったこと](#3-やったこと)
[4. 配信時の録画](#4-配信時の録画)
[5. 今回学んだこと](#5-今回学んだこと)
[6. オーナードローについて](#6-オーナードローについて)
[7. 多言語対応について](#7-多言語対応について)
[8. Windows API の呼び出し](#8-Windows API の呼び出し)
[9. 振り返り](#9-振り返り)
[10. 次回予告](#10-次回予告)

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

#2. 次回リンク
まだ

#3. やったこと
ずっと参考にしてたサイトの内容を最後まで学んだよ

〇　参考にしているサイト
http://kaitei.net/csforms/

〇　オーナードロー
https://www.kisoplus.com/sample/owner.html

〇　ローカライズ
https://docs.grapecity.com/help/multirow-winforms-8/DesignerAdvanced_Localization.html
https://qiita.com/YSRKEN/items/a96bcec8dfb0a8340a5f
http://kaitei.net/csforms/localization/

#4. 配信時の録画
https://www.youtube.com/watch?v=8Cw6eJoCU-c

#5. 今回学んだこと
色々学んだよ

#6. オーナードローについて
例えばリストボックスで一部の要素のみ文字色を変えたり、一部の段の背景色を変える場合は「オーナードロー」を用います。

https://atmarkit.itmedia.co.jp/bbs/phpBB/viewtopic.php?topic=25427&forum=7

ここが「オーナードロー」とは何かを分かりやすく書いてくれてると思う。
そのままだとWindows既定の描画を行ってしまう所を、独自の方法で描画できますよって感じ。

#7. 多言語対応について
　Resources.resxを編集することで、日本語表示と英語表示を動的に切り替える事が可能となる。

##7.1.　作ったもの

[Japanese]ボタンまたは[English]ボタンを押した場合、テキストボックス付きのダイアログを開くアプリを作った。
テキストボックス内では同じ文字列内容を表示するが、[Japanese]ボタンの場合は”Resources.resx”から、[English]ボタンの場合は”Resources.ja-JP.resx”から内容を読み取る。

起動後の画面は以下の通り
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/e2c8da21-925c-d700-4169-77ac82b96d1b.png)

[Japanese]ボタンを押した場合
![無題JP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/2c42caf0-575f-54f0-a031-3f68c42747d3.png)

[English]ボタンを押した場合
![無題EN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/bdab9c3c-85c4-5b5e-ef87-8bb301649305.png)

##7.2. つくりかた

 1. デザイン画面で、[Japanese]ボタンと[English]ボタンを配置する
 2. [Japanese]ボタンと[English]ボタンのクリックイベントハンドラ関数を作成する
 3. 各ハンドラ関数の中身を以下の通りにする

```C#:　[Japanese]ボタンクリック時イベントハンドラ
private void Japanese_Click(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP");
    Form2 form = new Form2();
    form.ShowDialog();
}
```

```C#:　[English]ボタンクリック時イベントハンドラ
private void English_Click(object sender, EventArgs e)
{
	System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
	Form2 form = new Form2();
	form.ShowDialog();
}
```

 4. ダイアログ画面は以下の様に設定

```C#:　ダイアログ画面のデザイン画面コード
namespace Dialog
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            textBox1.Text = Properties.Resources.String1;
        }
    }
}
```

 5. Resourceファイルは以下の通り

![Resource.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/f95df1f7-0544-8b07-21fc-9775660c9843.jpeg)

![Resources.ja-JP.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/baf071ea-92ef-1b46-1102-ed539353e335.jpeg)

 6. ソリューションエクスプローラは以下の通り

![ソリューションエクスプローラ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130837/9e0e5161-6c37-aa25-2064-32da57b0d2a0.png)

　こんな感じで設定すると、ボタンの操作で表示言語が変わるアプリができました。

#8. Windows API の呼び出し

http://kaitei.net/csforms/windows-api/

ここのプログラムをそのままコピペして動作確認した感じ。
WindowsAPIの使用は今後もよくあるみたいなので、ここの内容を覚えて応用していきたいですね！

#9. 振り返り
やっと参考サイトを最後まで読めたよ！
次週は何かを作っていきたいね！

#10. 次回予告
次回は12月12日(日）の20時からやるよ。
次どこを勉強するかは考えておくね

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

##Twitch配信先
https://www.twitch.tv/programing_study_meeting
(もしかしたら次からはうしゅ～垢のツイッチで放送するかも）

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