LoginSignup
0
1

More than 5 years have passed since last update.

.NET標準のグラフ(chart)の種類を動的に変更する(2/2)

Posted at

続き

.NET標準のグラフ(chart)の種類を動的に変更する(1/2)から

やりたいことの感じはつかめたので少しだけブラッシュアップ。
選択肢のグラフがすべて英語なのでわかりづらい、日本語でお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

同様に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

最後に

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1