1

何をしているのかを簡単に説明すると、チャートに 2 つのセレクターを描画すると、選択されない部分がその青い四角形の下に表示されます。選択されるパーツは、2 つのセレクターの間の白い領域に表示されます。下の図は、左側のセレクターのみを示しています。

今、私がやろうとしているのは、ウィンドウのサイズが変更されても、常にプロット領域内に残るチャート内に長方形を描画することです。

上、左、下の境界を取得し、下の図に示すように四角形を描画するには、次のようにします。

(...)
int top = (int)(Chart.Height * 0.07);
int bottom = (int)(Chart.Height - 1.83 * top);
int left = (int)(0.083 * Chart.Width);
Brush b = new SolidBrush(Color.FromArgb(128, Color.Blue));
e.Graphics.FillRectangle(b, left, top, marker1.X - left, bottom - top);
(...)

しかし、それは完璧にはほど遠いものであり、ウィンドウのサイズが変更されたときに適切な場所に描画されません。青い四角形が、プロット領域グリッドによって常に上、左、下にバインドされるようにします。それは可能ですか?

チャート

4

1 に答える 1

2

あなたはおそらくStripLineこれを達成するために使用したいと思うでしょう。ストリップラインクラスのドキュメントを調べてください。また、さまざまな機能を理解するのに非常に役立つチャートサンプルをダウンロードすることをお勧めします。

StripLine stripLine = new StripLine();    
stripLine.Interval = 0;       // Set Strip lines interval to 0 for non periodic stuff
stripLine.StripWidth = 10;    // the width of the highlighted area
stripline.IntervalOffset = 2; // the starting X coord of the highlighted area
// pick you color etc ... before adding the stripline to the axis
chart.ChartAreas["Default"].AxisX.StripLines.Add( stripLine );

これは、永続性を提供するプロットの領域をユーザーにマークアップさせるなど、Cursorすでに行っていないこと(CursorXを参照)が必要であることを前提としています。カーソルイベントを上記のストリップラインと組み合わせることは、それを行うための良い方法です。

したがって、カーソルの開始と終了を強調表示するには、これを行うことができます

// this would most likely be done through the designer
chartArea1.AxisX.ScaleView.Zoomable = false;
chartArea1.CursorX.IsUserEnabled = true;
chartArea1.CursorX.IsUserSelectionEnabled = true;
this.chart1.SelectionRangeChanged += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CursorEventArgs>(this.chart1_SelectionRangeChanged);
...

private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e)
    {
        chart1.ChartAreas[0].AxisX.StripLines.Clear();

        StripLine stripLine1 = new StripLine();
        stripLine1.Interval = 0;
        stripLine1.StripWidth = chart1.ChartAreas[0].CursorX.SelectionStart - chart1.ChartAreas[0].AxisX.Minimum;
        stripLine1.IntervalOffset = chart1.ChartAreas[0].AxisX.Minimum;
        // pick you color etc ... before adding the stripline to the axis
        stripLine1.BackColor = Color.Blue;
        chart1.ChartAreas[0].AxisX.StripLines.Add(stripLine1);

        StripLine stripLine2 = new StripLine();
        stripLine2.Interval = 0;
        stripLine2.StripWidth = chart1.ChartAreas[0].AxisX.Maximum - chart1.ChartAreas[0].CursorX.SelectionEnd;
        stripLine2.IntervalOffset = chart1.ChartAreas[0].CursorX.SelectionEnd;
        // pick you color etc ... before adding the stripline to the axis
        stripLine2.BackColor = Color.Blue;
        chart1.ChartAreas[0].AxisX.StripLines.Add(stripLine2);
    }

どういうわけか、あなたはまだカーソルを発見していないのではないかと思います。そうすることで、これはすべて無関係になります。しかしとにかく、上記のコードはあなたが説明したことをします。

于 2012-09-05T13:53:00.967 に答える