/// <summary> /// カーソルを更新します。 /// </summary> /// <param name="mouse">マウス座標</param> /// <param name="result">ヒットテストの結果</param> /// <param name="x">x座標</param> /// <param name="max_x">最大x座標</param> /// <param name="format">価格表示のフォーマット</param> public virtual void UpdateCursors(Point mouse, HitTestResult result, int x, int max_x, string format) { if (result.ChartArea == this) { // マウスが自エリア内の場合 // カーソル CursorX.SetCursorPixelPosition(mouse, false); CursorY.SetCursorPixelPosition(mouse, false); // カーソルラベルY CursorLabelY.Text = AxisY2.PixelPositionToValue(mouse.Y).ToString(format); CursorLabelY.Top = mouse.Y - CursorLabelY.Height / 2; if (AxisX.ScaleView.Position + AxisX.ScaleView.Size > max_x) { CursorLabelY.Left = (int)(AxisX.ValueToPixelPosition(AxisX.ScaleView.Position + AxisX.ScaleView.Size) + 1); } else { CursorLabelY.Left = (int)(AxisX.ValueToPixelPosition(AxisX.ScaleView.Position + AxisX.ScaleView.Size + 1) + 1); } CursorLabelY.Visible = true; } else { // マウスが他エリア内の場合 // カーソル CursorY.Position = double.NaN; // カーソルラベルY CursorLabelY.Visible = false; } }
// drawing axis title near arrows private void GraphArea_PostPaint(object sender, ChartPaintEventArgs e) { if (e.ChartElement is Chart && (axisX.TitleAlignment == TitleAlignment.NearAxisArrow || axisY.TitleAlignment == TitleAlignment.NearAxisArrow)) { Chart chart = (Chart)e.ChartElement; Graphics g = e.ChartGraphics.Graphics; Font drawFont = new Font("Verdana", 8); SolidBrush drawBrush = new SolidBrush(Color.Black); float x, y; // X AXIS if (axisX.TitleAlignment == TitleAlignment.NearAxisArrow) { x = chart.Width - 90 - g.MeasureString(axisX.TextToDisplay, drawFont).Width; y = (float)AxisY.ValueToPixelPosition(0) - 20; g.DrawString(axisX.TextToDisplay, drawFont, drawBrush, x, y); } // Y AXIS if (axisY.TitleAlignment == TitleAlignment.NearAxisArrow) { x = (float)AxisX.ValueToPixelPosition(0); y = chart.Location.X; g.DrawString(axisY.TextToDisplay, drawFont, drawBrush, x, y); } drawFont.Dispose(); drawBrush.Dispose(); } }