C# 如何在Zedgraph中绘制鼠标不移动时保持不变的扩展十字光标?
我正在使用Zedgraph创建一个股票图表应用程序。该图表有多个指示器窗格。我想显示一个十字光标,它延伸到包含所有图形窗格的Zedgraph控件的范围。使用下面的代码和MouseMove事件,我完成了一半的工作。但是,当鼠标停止移动时,十字光标将消失。当鼠标静止不动时,如何显示它们?我的Zedgraph控件在下面的代码中命名为“chtOHLC”C# 如何在Zedgraph中绘制鼠标不移动时保持不变的扩展十字光标?,c#,cursor,zedgraph,C#,Cursor,Zedgraph,我正在使用Zedgraph创建一个股票图表应用程序。该图表有多个指示器窗格。我想显示一个十字光标,它延伸到包含所有图形窗格的Zedgraph控件的范围。使用下面的代码和MouseMove事件,我完成了一半的工作。但是,当鼠标停止移动时,十字光标将消失。当鼠标静止不动时,如何显示它们?我的Zedgraph控件在下面的代码中命名为“chtOHLC” #region Extended Crosshairs private Point _mousePoint; private void chtOHLC_
#region Extended Crosshairs
private Point _mousePoint;
private void chtOHLC_MouseMove(object sender, MouseEventArgs e)
{
_mousePoint = new Point(e.X, e.Y);
chtOHLC.Refresh();
}
private void chtOHLC_Paint(object sender, PaintEventArgs e)
{
if (_mousePoint != null)
{
Graphics g = chtOHLC.CreateGraphics();
g.DrawLine(Pens.Black, 0, _mousePoint.Y, chtOHLC.Width, _mousePoint.Y);
g.DrawLine(Pens.Black, _mousePoint.X, 0, _mousePoint.X, chtOHLC.Height);
g.Dispose();
}
}
#endregion
试试看:
将其添加到表单类中
ZedGraph这是我的图书馆实例
private double? CrossHairX = null;
private double? CrossHairY = null;
LineObj xHairOld = new LineObj();
LineObj yHairOld = new LineObj();
ZedGraph鼠标移动事件:
private void ZedGraph_MouseMove(object sender, MouseEventArgs e)
{
double x, y;
ZedGraph.GraphPane.ReverseTransform(e.Location, out x, out y);
#region crosshair
if (x < ZedGraph.GraphPane.XAxis.Scale.Min ||
x > ZedGraph.GraphPane.XAxis.Scale.Max ||
y < ZedGraph.GraphPane.YAxis.Scale.Min ||
y > ZedGraph.GraphPane.YAxis.Scale.Max
)//out of the bounds
{
ZedGraph_MouseLeave(new object(), new EventArgs());
}
else//ok draw
{
if (CrossHairX != null && CrossHairY != null)
{
ZedGraph.GraphPane.GraphObjList.Remove(xHairOld);
ZedGraph.GraphPane.GraphObjList.Remove(yHairOld);
}
LineObj xHair = new LineObj(ZedGraph.GraphPane.XAxis.Scale.Min, y, ZedGraph.GraphPane.XAxis.Scale.Max, y);
LineObj yHair = new LineObj(x, ZedGraph.GraphPane.YAxis.Scale.Min, x, ZedGraph.GraphPane.YAxis.Scale.Max);
ZedGraph.GraphPane.GraphObjList.Add(xHair);
xHairOld = xHair;
ZedGraph.GraphPane.GraphObjList.Add(yHair);
yHairOld = yHair;
CrossHairY = y;
CrossHairX = x;
ZedGraph.Refresh();
}
#endregion
}
我认为你的表现有问题。LineObj比Graphics快试试:
将其添加到表单类中
ZedGraph这是我的图书馆实例
private double? CrossHairX = null;
private double? CrossHairY = null;
LineObj xHairOld = new LineObj();
LineObj yHairOld = new LineObj();
ZedGraph鼠标移动事件:
private void ZedGraph_MouseMove(object sender, MouseEventArgs e)
{
double x, y;
ZedGraph.GraphPane.ReverseTransform(e.Location, out x, out y);
#region crosshair
if (x < ZedGraph.GraphPane.XAxis.Scale.Min ||
x > ZedGraph.GraphPane.XAxis.Scale.Max ||
y < ZedGraph.GraphPane.YAxis.Scale.Min ||
y > ZedGraph.GraphPane.YAxis.Scale.Max
)//out of the bounds
{
ZedGraph_MouseLeave(new object(), new EventArgs());
}
else//ok draw
{
if (CrossHairX != null && CrossHairY != null)
{
ZedGraph.GraphPane.GraphObjList.Remove(xHairOld);
ZedGraph.GraphPane.GraphObjList.Remove(yHairOld);
}
LineObj xHair = new LineObj(ZedGraph.GraphPane.XAxis.Scale.Min, y, ZedGraph.GraphPane.XAxis.Scale.Max, y);
LineObj yHair = new LineObj(x, ZedGraph.GraphPane.YAxis.Scale.Min, x, ZedGraph.GraphPane.YAxis.Scale.Max);
ZedGraph.GraphPane.GraphObjList.Add(xHair);
xHairOld = xHair;
ZedGraph.GraphPane.GraphObjList.Add(yHair);
yHairOld = yHair;
CrossHairY = y;
CrossHairX = x;
ZedGraph.Refresh();
}
#endregion
}
我认为你的表现有问题。LineObj比图形更快