我使用ZedGraph在图表上显示曲线。我创建了十字线,显示了它在图例中所针对的点的价值。我可以用鼠标或键盘将十字准线从一个点移动到另一个点。
当我用鼠标移动十字准线时,点值的显示是正确的。当我尝试用键盘移动它时,它会显示前一个斑点的值。当我使用调试器查看发生的情况时,它会显示正确的值。
让我们考虑5点曲线A(0,0); B(1,1); C(2,2); D(3,3); E(4,4)
。如果我使用鼠标从A到B移动十字准线,则显示为y = 0 x = 0
,并且在鼠标移动后为y = 1 x = 1
。如果我使用键盘从B转到C,则显示保持在y = 1 x = 1
(而调试器显示为y = 2 x = 2
),如果我从C移到D,则显示为y = 2 x = 2
而调试器为y = 3 x = 3
private void lineGraphControl1_KeyDown(Object sender, KeyEventArgs e)
{
bool first = false;
bool second = false;
if (e.Modifiers == Keys.Control && !showTwoCursor)
{
first = true;
}
else if (showTwoCursor)
{
if (crosshairList[0].Index < crosshairList[1].Index)
{
first = e.Modifiers == Keys.Control;
second = e.Modifiers == Keys.Alt;
}
}
if(first || second)
{
Crosshair crosshair = null;
if (first)
crosshair = crosshairList[0];
if (second)
crosshair = crosshairList[1];
if (e.KeyCode == Keys.Left && crosshair.Index > 0)
crosshair.Index--;
else if (e.KeyCode == Keys.Right && crosshair.Index + 1 < curve.NPts)
crosshair.Index++;
else
return;
drawCursors(first, second, true);
}
}
说。如果我用鼠标从D移动到E,它会显示正确的值。
我该如何解决?
绘图和图例是相同的功能,只是有一些区别,取决于谁叫这个功能。
这是键盘事件:
private bool lineGraphControl1_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)
{
// Draw the cursor near the mouse location.
drawCursors(drawFirstCursor, drawSecondCursor, false, e.Location);
return false;
}
和鼠标事件:
{{1}}
我没有看到有关刷新屏幕事件的任何信息......
答案 0 :(得分:1)
使用Zedgraph,一些处理程序可以调用鼠标和键盘事件。
因此,当您使用键盘时,也可以调用鼠标事件,具体取决于您的处理程序。
这会产生你的错误。