安心海叶 发表于 2015-12-15 15:37:00

ChartPanel问题

您好!

请问在Chart里面添加可拖动的线,如何让鼠标只有在线的附近点击时,才能LeftMouseButtonDrag?

现在默认的是只有在右侧,并且右侧离线很远时,线也可以动。

Alice 发表于 2015-12-15 16:04:00

回复 1楼安心海叶的帖子

谢谢您的反馈。
您可以在鼠标相关事情,比如MouseLeftButtonDown事件里,拿到当前的点,然后在MouseMove里判断和可移动的线之间的距离,选择您认为合适移动的距离。
基本思路
1.调用事件。
void ds_PlotElementLoaded(object sender, EventArgs e)
{
    var pe = (PlotElement)sender;
    pe.MouseLeftButtonDown += new MouseButtonEventHandler(pe_MouseLeftButtonDown);
    pe.MouseLeftButtonUp += new MouseButtonEventHandler(pe_MouseLeftButtonUp);
}

2.鼠标左键拿到PlotElement
PlotElement currentPE;
void pe_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    //Capture plot element clicked on
    currentPE = (PlotElement)sender;
}

void pe_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    //Clear selected plot element
    currentPE = null;
}

3.移动的时候判断:
void c1Chart1_MouseMove(object sender, MouseEventArgs e)
{
    //判断满足您的条件的时候拖拽
}

安心海叶 发表于 2015-12-16 13:06:00

回复 2楼Alice的帖子

不太理解您的含义,ds_PlotElementLoaded是?

安心海叶 发表于 2015-12-16 13:12:00

回复 2楼Alice的帖子

现在想要封装一个类,工程所有ChartPanelObject都具有这些特征

Alice 发表于 2015-12-16 14:01:00

回复 4楼安心海叶的帖子

那是DataSeries下的事件PlotElementLoaded。
我的意思是,2楼的代码想要说明您可以自己去判断拖拽的合适位置以及时机。
鼠标的操作需要在鼠标相关事件里完成,ChartPanelObject只是一个容器,如果您需要自定义的话,还是需要在鼠标相关的事件里写代码去完成。

安心海叶 发表于 2015-12-16 15:22:00

控件默认添加的线,如果Action为LeftMouseButtonDrag,只能向线的右侧拖拽,而不能向线的左侧拖拽?

我们只有在Chart中添加线,请问如何在鼠标事件里完成?

我们要实现的功能是:对于添加的线,可以在点击线时,实现左右拖拽功能。

以下是一个Demo,请问如何实现?


Alice 发表于 2015-12-16 15:47:00

回复 6楼安心海叶的帖子

请将您的demo发过来,我帮您看看。

安心海叶 发表于 2015-12-18 15:24:00

回复 7楼Alice的帖子

请问demo收到了吗?

Alice 发表于 2015-12-18 16:19:00

回复 8楼安心海叶的帖子

抱歉,收到了,测试后给您反馈。

安心海叶 发表于 2015-12-18 16:48:00

回复 9楼Alice的帖子

好的,谢谢~
页: [1] 2
查看完整版本: ChartPanel问题