.NET標準のグラフ(chart)の種類を動的に変更する（２／２）

# 続き
[.NET標準のグラフ(chart)の種類を動的に変更する（１／２）](https://qiita.com/kingdog0220/items/ac6459836351ae4625ac)から

やりたいことの感じはつかめたので少しだけブラッシュアップ。
選択肢のグラフがすべて英語なのでわかりづらい、日本語でおkという感じなので
SeriesChartTypeのメンバ名をKey、その日本語名をValueとしたい。

Dictionary? それともKeyValuePair? 
ここはどちらも使わず、格納用のクラスを作成。

```SeriesChartTypeKeyValue.cs
class SeriesChartTypeKeyValue
{
    public SeriesChartType SeriesChartType { get; set; }
    public string SeriesChartTypeJPN { get; set; }

    public SeriesChartTypeKeyValue(SeriesChartType seriesChartType, string seriesChartTypeJPN)
    {
        this.SeriesChartType = seriesChartType;
        this.SeriesChartTypeJPN = seriesChartTypeJPN;
    }
}
```

グラフは右側を広げて適当に配置します。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/130149/6770c776-fe4a-b51a-e1d5-b4770c30147c.png)

同様にComboBoxに設定するリストを作成する。

```Form1.cs
private readonly List<SeriesChartTypeKeyValue> _seriesChartTypeKeyValueList = new List<SeriesChartTypeKeyValue>
                {
                        new SeriesChartTypeKeyValue(SeriesChartType.Area, "面グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Bar, "横棒グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.BoxPlot,"ボックスプロットグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Bubble,"バブルチャート"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Candlestick,"ローソク足チャート"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Column,"縦棒グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Doughnut,"ドーナツグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.ErrorBar,"誤算範囲グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.FastLine,"FastLineグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.FastPoint,"FastPointグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Funnel,"じょうごグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Kagi,"かぎ足チャート"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Line,"折れ線グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Pie,"円グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Point,"ポイントグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.PointAndFigure,"PointAndFigureグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Polar,"極座標グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Pyramid,"ピラミッドグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Radar,"レーダーチャート"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Range,"範囲グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.RangeBar,"RangeBarグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.RangeColumn,"範囲縦棒グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Renko,"練行足チャート"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Spline,"スプライングラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.SplineArea,"スプライン面グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.SplineRange,"スプライン範囲グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.StackedArea,"積み上げ面グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.StackedArea100,"100%積み上げグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.StackedBar,"積み上げ横棒グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.StackedBar100,"100%積み上げ横棒グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.StackedColumn,"積み上げ縦棒グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.StackedColumn100,"100%積み上げ縦棒グラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.StepLine,"StepLineグラフ"),
                        new SeriesChartTypeKeyValue(SeriesChartType.Stock,"株価チャート"),
                        new SeriesChartTypeKeyValue(SeriesChartType.ThreeLineBreak,"ThreeLineBreakグラフ")
                };
```

あとは1つ目のときと同じように処理を書いてやればいい。

気をつける点はComboBoxのイベント処理でキャストを忘れないこと。

```Form1.cs
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox2.SelectedItem != null) { 
        chart2.Series["Sample2"].ChartType = ((SeriesChartTypeKeyValue)comboBox2.SelectedItem).SeriesChartType;
    }
}
```
あとはComboBoxのKey値とValue値のプロパティの設定を忘れないこと。

```Form1.cs
private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DataSource = _seriesChartTypeList;

    comboBox2.DataSource = _seriesChartTypeKeyValueList;
    comboBox2.ValueMember = "SeriesChartType";
    comboBox2.DisplayMember = "SeriesChartTypeJPN";
}
```

動かしたらこんな感じ

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/130149/fe781331-a4f0-6a72-bd36-7905be3a743e.png)


##最後に
まあ仕事では外部のライブラリ製品使うことになるんですけどね。（きっと、おそらく、多分、そうであってくれ）