我写了一个代码来使用鼠标绘制一条线。
在鼠标按下时,我保存用户点击的位置。
bool mZgc_MouseDownEvent(ZedGraphControl sender, MouseEventArgs e)
{
GraphPane graphPane = mZgc.GraphPane;
graphPane.ReverseTransform(e.Location, out mMouseDownX, out mMouseDownY);
return false;
}
在鼠标上移动我画线:
bool zgc_MouseUpEvent(ZedGraphControl sender, MouseEventArgs e)
{
GraphPane graphPane = mZgc.GraphPane;
double x, y;
graphPane.ReverseTransform(e.Location, out x, out y);
LineObj threshHoldLine = new LineObj(Color.Red, mMouseDownX, mMouseDownY, x, y);
graphPane.GraphObjList.Add(threshHoldLine);
mZgc.Refresh();
return false;
}
问题是当鼠标停机时,用户看不到该行(因为我只在“向上”事件中绘制它。)
我该如何解决?
从技术上讲,我可以使用“悬停”并每秒从图形中绘制/删除线条并刷新图形,但这有点疯狂。
有没有“正常”的方式来做到这一点?
由于
答案 0 :(得分:0)
好的,我已经解决了问题,我将为后代发布答案。
首先,我们需要对zedgraph代码进行微小的更改,以允许自己在创建后更改行,这可能会破坏创建者试图实现的一些“不可变”范例,但是如果你想避免创建并且每次鼠标移动时都删除行。
在Location.cs文件中编辑X2,Y2属性(缺少设置):
public double X2
{
get { return _x+_width; }
set { _width = value-_x; }
}
public double Y2
{
get { return _y+_height; }
set { _height = value-_y; }
}
从这里很容易,我不会发布所有代码,但会解释步骤:
private LineObj mCurrentLine;
mCurrentLine = new LineObj(Color.Red, mMouseDownX, mMouseDownY, mMouseDownX, mMouseDownY);
mCurrentLine.Location.X2 = x;
如果有人真正要使用它,并需要更好的解释,请发表评论。