есть график функции типа chart. Необходимо написать код, что бы по наведению мышки на точку графика, показывались координаты точки.
Реализация вывода графика :
int x = 0;
for (double i = -Period; i <= Period; i += step) {
chart.Visible = true;
chart.Series[0].ChartType = SeriesChartType.Spline;
mas_MyGraphic5[x] = FuncForGraphic5(i);
chart5.Series[0].Points.AddXY(i, FuncForGraphic5(i));
x++;
}
Предлагаю установить следующее значение свойства Series.ToolTip
:
chart.Series[0].ToolTip = "X = #VALX, Y = #VALY";
В этом случае никакого дополнительного кода писать не придется.
Еще можно подписаться на событие Chart.GetToolTipText
, и, используя передаваемый в обработчик экземпляр класса ToolTipEventArgs
, вычислять и выводить в ToolTip что заблагорассудится.
chart.GetToolTipText += chart_GetToolTipText;
Обработчик:
private void chart_GetToolTipText(object sender, ToolTipEventArgs e)
{
// Если текст в подсказке уже есть, то ничего не меняем.
if (!String.IsNullOrWhiteSpace(e.Text))
return;
Console.WriteLine(e.HitTestResult.ChartElementType);
switch (e.HitTestResult.ChartElementType)
{
case ChartElementType.DataPoint:
case ChartElementType.DataPointLabel:
case ChartElementType.Gridlines:
case ChartElementType.Axis:
case ChartElementType.TickMarks:
case ChartElementType.PlottingArea:
// Первый ChartArea
var area = chart.ChartAreas[0];
// Его относительные координаты (в процентах от размеров Chart)
var areaPosition = area.Position;
// Переводим в абсолютные
var areaRect = new RectangleF(areaPosition.X * chart.Width / 100, areaPosition.Y * chart.Height / 100,
areaPosition.Width * chart.Width / 100, areaPosition.Height * chart.Height / 100);
// Область построения (в процентах от размеров area)
var innerPlot = area.InnerPlotPosition;
double x = area.AxisX.Minimum +
(area.AxisX.Maximum - area.AxisX.Minimum) * (e.X - areaRect.Left - innerPlot.X * areaRect.Width / 100) /
(innerPlot.Width * areaRect.Width / 100);
double y = area.AxisY.Maximum -
(area.AxisY.Maximum - area.AxisY.Minimum) * (e.Y - areaRect.Top - innerPlot.Y * areaRect.Height / 100) /
(innerPlot.Height * areaRect.Height / 100);
Console.WriteLine("{0:F2} {1:F2}", x, y);
e.Text = String.Format("{0:F2} {1:F2}", x, y);
break;
}
}
Несмотря на то, что координаты вычисляются верно и засылаются в e.Text
, лично у меня ToolTip отображается далеко не всегда. Поэтому для верности я печатаю их в консоль. А вы вместо этого можете их отображать в каком-нибудь контроле.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно чтобы программа брала из textbox текст и отправляла, по нажатию кнопки, в то место, где грубо говоря ее вставят, будь то строчка в браузере...