2016-05-01 12 views
0

チャートコントロール付きのWindowsフォームがあります。私のコードでは、新しいチャートコントロールを動的に生成します。既存のチャートコントロール(chartCC)を新しいチャートコントロール(chart)に置き換える必要があります。既存のチャートコントロールを新しい動的に作成されたチャートコントロールに置き換えます。

方法1

Chart chart = Charts.CreateNewChart(chartCC.Location.X, chartCC.Location.Y, chartCC.Width, chartCC.Height, dataIdx, 16, 12, 5f, 5f, "BB"); 

    chartCC = chart; 

方法1動作しません:私はそれを行うための二つの方法を試してみました。チャートコントロールに視覚的に何も起こりません。

方法2

Chart chart = Charts.CreateNewChart(chartCC.Location.X, chartCC.Location.Y, chartCC.Width, chartCC.Height, dataIdx, 16, 12, 5f, 5f, "BB"); 

    chartCC.ChartAreas.Clear(); 
    foreach (var ca in chart.ChartAreas) 
    { 
     chartCC.ChartAreas.Add(ca); 
    } 

    //Chart Series 
    chartCC.Series.Clear(); 
    foreach(var cs in chart.Series) 
    { 
     chartCC.Series.Add(cs); 
    } 

    //Chart Titles 
    chartCC.Titles.Clear(); 
    foreach (var title in chart.Titles) 
    { 
     chartCC.Titles.Add(title); 
    } 

    //Chart Annotations 
    chartCC.Annotations.Clear(); 
    foreach (var annotation in chart.Annotations) 
    { 
     chartCC.Annotations.Add(annotation); 
    } 

     chartCC.ChartAreas[0].RecalculateAxesScale(); 
     chartCC.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash; 
     chartCC.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; 

     chartCC.ChartAreas[0].CursorX.IsUserEnabled = true; 
     chartCC.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; 
     chartCC.ChartAreas[0].CursorX.SelectionColor = System.Drawing.Color.Transparent; 

     chartCC.Invalidate(); 

方法2つの作品は、しかし、それは私のために大きな問題が発生します。自分のコードにCursorPositionChangedイベントハンドラがあります。私は方法2

を使用する場合

private void chartCC_CursorPositionChanged(object sender, CursorEventArgs e) 
    { 

} 

ただし、このイベントハンドラは、かわりに私のイベントハンドラを維持しながら、これを行うための最善の方法は何ですか発生しませんか?

+1

_Charts.CreateNewChart_それは何であるべきか、それとも何ですか?あなた自身のライブラリ?あなたは新しいコレクションをコントロールコレクションに追加しませんでした: 'chart.Parent = chartCC.Parent;'おそらく 'chart.BringToTop();' – TaW

+0

Charts.CreateNewChartは、必要な新しいチャートを作成する独自のライブラリです表示されます。私は、新しいウィンドウフォームを生成して追加することでそれをテストしました。それはうまく動作します。私の問題は、既存のチャートコントロールを置き換えることです – user1035217

+0

あなたの '親'と 'BringToTop'が正常に機能しました。グラフが表示されます。しかし、私のすべてのイベントハンドラ(CursorPositionChanged、MouseMove)は機能していません。 – user1035217

答えて

1

方法1:Charts.CreateNewChartが指定されたパラメータで新しいChartを作成する場合、期待どおりにControlsコレクションに追加する必要があります。これは、仕事をする必要があります

:正確に同じことを

chartCC.Parent.Controls.Add(chart); 

chart.Parent = chartCC.Parent; 

これは、短い手のバージョンです。前面に

あなたも、この必要があります。

chart.BringToTop(); 

をあなたの方法2は、チャートの詳細をクローン化するために偉大な長さになります。必要ならばそれをしなくてはなりません。しかし、それらがすべてデフォルト値を持っていれば、それは必要ないかもしれません。しかし、上記のようにControlsコレクションに追加する必要があります。

関連する問題