окна формы: создать прозрачную графику на диаграмме в C # - PullRequest
1 голос
/ 13 февраля 2012

Я исчерпывающе воспользовался поиском, но не смог найти удовлетворительного решения своей проблемы.

Я запрограммировал визуализацию данных с помощью диаграммы (datavisualization.charting.chart).Эта диаграмма постоянно меняется, так как показывает некоторые результаты моделирования.Я хотел бы нарисовать, например, линию на графике (в зависимости от положения мыши), чтобы показать контекстно-зависимую информацию.

Поэтому я попробовал две реализации, ни одна из них не работает точно так, как мне бы хотелосьto:

plotLine вызывается в MouseMove - событие

gGraph создается из нижележащего графа с помощью: chartCreateGraphics ();

protected void plotLine(object sender, System.EventArgs e)
{
  if (this.chart.Series.Count > 0) //ensure that the chart shows data
  {
    plotChart(); // this plots the underlying chart
    penGraph = new Pen(Color.Black);
    Point point1 = new Point(Form1.MousePosition.X - chart.Location.X, 0);
    Point point2 = new Point(Form1.MousePosition.X - chart.Location.X,     
    chart.Location.Y + chart.Size.Height);
    gGraph.DrawLine(penGraph, point1, point2);
    penGraph.Dispose();     
  }
}

Здесь линия исчезает каждый раз сразу после построения графика, но должна оставаться до тех пор, пока мышь не перемещается.

protected void plotLine(object sender, System.EventArgs e)
{
  penGraph = new Pen(Color.Black);
  Point point1 = new Point(Form1.MousePosition.X - chart.Location.X, 0);
  Point point2 = new Point(Form1.MousePosition.X - chart.Location.X,     
  chart.Location.Y + chart.Size.Height);
  gGraph.DrawLine(penGraph, point1, point2);
  penGraph.Dispose();           
}

Здесь все нанесенные линии остаются на графической поверхности до тех пор, пока график не будет нанесен новым.(для указания положения мыши должна остаться только последняя строка)

Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 14 февраля 2012

Вы должны рисовать в событии OnPaint. Вы обходите модель обновления и видите эффект от этого. Конечно, вы делаете некоторые рисования в MouseMove, но когда сработает событие Paint, оно будет просто стерто.

Сначала поместите свой код в OnPaint. При перемещении мыши просто запишите все данные, которые вам нужны (например, положение мыши), а затем вызовите Invalidate () на графике. Когда вы это сделаете, будет вызвано событие Paint и ваш код чертежа сработает.

эмпирическое правило; никогда не рисовать нигде, кроме события Paint.

...