2016-06-01 9 views
0

私は2つのチャート:chart1chart2を持っています。どのようにしてinnerPlotsを整列できますか?

両方のグラフに同じinnerPlotSizelocationを設定します。

しかし、chart1は、二次y軸を有する。

これは動作しません:

chart2.ChartAreas[0].AlignWithChartArea = chart1.ChartAreas[0].Name; 
chart2.ChartAreas[0].AlignmentStyle = AreaAlignmentStyles.PlotPosition; 
chart2.ChartAreas[0].AlignmentOrientation = AreaAlignmentOrientations.Vertical; 
+0

第二次隊の追悼最初のチャートエリアの1つからのrtarea。単純にxとwidthのフォームをコピーしてから、もう一方のYとHeightを保持してください! – TaW

+0

chart2.ChartAreas [0] .InnerPlotPosition = chart1.ChartAreas [0] .InnerPlotPosition;何の違いもないようです。また、InnerPositionの幅はどこにありますか? – ManInMoon

+0

ああ、申し訳ありません。私は、2つのチャートが実際には異なるチャートエリアの同じチャートコントロールにあると仮定していました。両方がautoに設定されている場合、コードは実際には違いはありません。 'RectangleF r1 = chart.ChartAreas [0] .Position.ToRectangleF();を呼び出すことによって実際の数値を取得する必要があります(各コンテナのパーセントで!)。 RectangleFr2 = chart.ChartAreas [0] .InnerPlotPosition.ToRectangleF(); ' – TaW

答えて

0

これは2 ChartsInnerPlotPositionsを揃えます:

// align the controls: 
    yourChart1.Left = yourChart2.Left; 
    yourChart1.Size = yourChart2.Size; 


    // get the numbers of the current innerplotpositions 
    RectangleF ri1 = yourChart1.ChartAreas[0].InnerPlotPosition.ToRectangleF(); 
    RectangleF ri2 = yourChart2.ChartAreas[0].InnerPlotPosition.ToRectangleF(); 

    if (ri1.Width < ri2.Width) 
    { 
     yourChart2.ChartAreas[0].InnerPlotPosition = 
      new ElementPosition(ri1.Left, ri2.Top, ri1.Width, ri2.Height); 
    } 
    else 
    { 
     yourChart1.ChartAreas[0].InnerPlotPosition = 
      new ElementPosition(ri2.Left, ri1.Top, ri2.Width, ri1.Height); 
    } 

前と後:あなたは新しいを作成することができ

enter image description hereenter image description here

+0

これはかなり良いようです - ありがとうございます。問題は、最初のグラフがズームモードのとき、2番目のグラフがyAxisスクロールバーの量だけミスアライメントされていることです。どのようにそれを修正するための任意のアイデア? – ManInMoon

+0

私はスクロールバーがcharareaの一部であり、innerplotpositionではないと信じています。だから私たちは1ステップ戻って両方から値を計算しなければならないでしょう。グラフクライアントの四角形にネストされているグラフエリアにネストされています。 - 。私は今夜​​縛られている。私は明日仕事ができることを願っています。 – TaW

+0

実際には、(元々)大きなチャートをズームインすると、IPPはまだ整列しています。ソリューションは簡単です:すべてのサイズ変更と同じようにズームごとに再調整する必要があります。だからScaleViewChangedイベントからアライメントを呼び出すのが最適です! – TaW

関連する問題