4

いくつかの分析結果をグラフィカルに表示するために使用される4つのチャートコントロールを備えたC#WinFormsアプリケーションがあります。

私は各グラフでコードを機能させていますが、コードをより効率的に再利用するために、コードブロックを次のように定義しました。

  • 必要なシリーズを作成し、
  • データベースからデータを抽出し、結果を適切なシリーズに割り当てます
  • シリーズをチャートに追加します
  • チャートの外観をカスタマイズします。

データは設計時に存在しないため、上記のすべてが動的に実行されます。

私が再利用しようとしている作業コードは次のとおりです。

// Add both series to the chart.  
ChartName.Series.AddRange(new Series[] { series1, series2 });  

// Cast the chart's diagram to the XYDiagram type, to access its axes.  
XYDiagram diagram = (XYDiagram)ChartName.Diagram; 

ChartNameコードを再利用するために、オブジェクトを各チャートに渡すことができる変数に変更したいと思います。次のようなもの(これは機能しないことに注意してください):-

var VChart = this.Controls.Find(ChartName, true);  

// Add both series to the chart.  
VChart.Series.AddRange(new Series[] { series1, series2 });  

// Cast the chart's diagram to the XYDiagram type, to access its axes.  
XYDiagram diagram = (XYDiagram)VChart.Diagram; 

ChartNameに変数を渡す方法に関するアイデア、ヒント、ヒントなどがあれば幸いです。

完全なコード:

    void Generate_Chart()
    {
        // Create two stacked bar series.
        Series series1 = new Series("Data", ViewType.Bar);
        Series series2 = new Series("Ben", ViewType.Line);

        try
        {                    
            using (var cmd = new SQLiteCommand(m_dbConnection))
            for (int i = LoopMin; i < LoopMax; i++)
            {
                // Retrieve the actual calculated values from the database
                cmd.CommandText = "SELECT " + Chart_SourceActualValue + " FROM " + Chart_SourceTable + " WHERE Value = " + i + "";
                Chart_SeriesA_Value = Convert.ToInt32(cmd.ExecuteScalar());

                // Retrieve the expected values from the database
                cmd.CommandText = "SELECT " + Chart_BenExpValue + " FROM " + Chart_SourceTable + " WHERE Value = " + i + "";
                Chart_SeriesB_Value = Convert.ToInt32(cmd.ExecuteScalar());

                // Add the dynamically created values to a series point for the chart
                series1.Points.Add(new SeriesPoint(i, Chart_SeriesA_Value));
                series2.Points.Add(new SeriesPoint(i, Chart_SeriesB_Value));
            }
        }
        catch (Exception)
        {                
            throw;
        }

        // Add both series to the chart.
        //this.Controls.Find(varChart, true)
        ChartName.Series.AddRange(new Series[] { series1, series2 });

        // Remove the GridLines from the chart for better UI
        // Cast the chart's diagram to the XYDiagram type, to access its axes.
        XYDiagram diagram = (XYDiagram)ChartName.Diagram;
        // Customize the appearance of the axes' grid lines.
        diagram.AxisX.GridLines.Visible = false;
        }        
}
4

1 に答える 1