首页 新闻 会员 周边 捐助

图表拖拽问题

0
悬赏园豆:100 [已解决问题] 解决于 2012-02-21 17:49

问题补充:

我用的是ComponentOne控件集,请高手赐教,谢谢啦

亮仔爱编程的主页 亮仔爱编程 | 初学一级 | 园豆:191
提问于:2012-02-20 12:16
< >
分享
最佳答案
0

你可以用鼠标的三个事件来实现。鼠标按下事件中记录一个鼠标初始位置,并设置为拖拽状态,鼠标移动事件中计算好鼠标的位置和初始的位置的差值,然后再把图表所有的点移动位置,鼠标松开的事件中设置退出拖拽状态。

收获园豆:100
LCM | 大侠五级 |园豆:6876 | 2012-02-21 00:38

目前的图表的拖拽已经实现啦!就是你说的这三个事件呀!但是现在的问题是,在图表拖拽过程中图标的坐标轴也在变化,所以就照成了图表的闪动呀!我现在就是想解决这个闪动问题,就是不想让图表的坐标轴在图表移动的过程中变化呀。

亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 08:58

@亮仔爱编程: 你用的是什么控件?要不你把你的代码整理成一个小的demo放在附件里,大家帮你试试吧。

LCM | 园豆:6876 (大侠五级) | 2012-02-21 09:01

@LCM: Demo我做的有呀,但是不知道在哪儿上传附件呀

亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 10:28

@亮仔爱编程: 问题补充那里应该可以上传附件的,好像见人传过。

LCM | 园豆:6876 (大侠五级) | 2012-02-21 10:34

@LCM: 那只能上传图片呀,不能上传其他格式的文件呀

亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 10:45

@亮仔爱编程: 可能你没找到上传附件的地方。那你把附件放到其它地方,然后发个网址放上面吧。

LCM | 园豆:6876 (大侠五级) | 2012-02-21 10:47

@亮仔爱编程: 你看这个人就能上传rar的附件呢。http://q.cnblogs.com/q/31842/#c255482

LCM | 园豆:6876 (大侠五级) | 2012-02-21 10:48

@LCM: 要不把您邮箱给我,我给您发一个,您帮我看看可以吗?

亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 11:18

@亮仔爱编程: liuxin95915@163.com

LCM | 园豆:6876 (大侠五级) | 2012-02-21 11:19

@LCM: 您接收一下,谢谢啦

亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 12:02

@亮仔爱编程: 好的。我吃完饭回来看一下。

LCM | 园豆:6876 (大侠五级) | 2012-02-21 12:20

@亮仔爱编程: 改了一点点,应该可以了。你试一下。修改的方法如下:

void mainChart_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
this.mainChart.ChartGroups[0].CoordToDataCoord(e.X, e.Y, ref sx, ref sy);//加了这一句
updateAxis();
this.mainChart.ChartGroups[0].CoordToDataCoord(e.X, e.Y, ref fx, ref fy);
this.mainChart.Refresh();
}

}
 private void updateAxis()
{
double xTemp = sx - fx;
double yTemp = sy - fy;
//this.mainChart.ChartArea.AxisX.Min -= xTemp;
//this.mainChart.ChartArea.AxisX.Max -= xTemp;
//this.mainChart.ChartArea.AxisY.Min -= yTemp;
//this.mainChart.ChartArea.AxisY.Max -= yTemp;
//this.mainChart.ChartArea.AxisY2.Min -= yTemp;
//this.mainChart.ChartArea.AxisY2.Max -= yTemp;
//上面的坐标移动改成曲线点移动
C1.Win.C1Chart.ChartDataArray chartXDataArray = this.dts.X;
C1.Win.C1Chart.ChartDataArray chartYDataArray = this.dts.Y;
for (int i = 0; i < chartXDataArray.Length; i++)
{
chartXDataArray[i] = double.Parse(chartXDataArray[i].ToString()) + xTemp;
}
for (int i = 0; i < chartYDataArray.Length; i++)
{
chartYDataArray[i] = double.Parse(chartYDataArray[i].ToString()) + yTemp;
}
}




LCM | 园豆:6876 (大侠五级) | 2012-02-21 13:11

@LCM: 这个跟式样不符呀!我们式样要求不能改曲线的数值呀!要求有点儿跟谷歌地图在拖拽时的效果相似呀,拖拽过程是改变显示的区域呀!麻烦您能不能再看看

亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 14:01

@亮仔爱编程: 哦,我还以为你说的是固定轴只移动图呢。你现在实现的就和谷歌的拖拽效果相似了啊,只是好像移动时当轴坐标上显示的数字和轴最大值最小值有一点距离的时候,边框会改变一点点,这个是控件的属性,当你设置的坐标最大或最小值是小数时,它会取整,所以大小会改变一点点,你查查控件有没有哪个属性可以设置这个,或者问问技术支持。

LCM | 园豆:6876 (大侠五级) | 2012-02-21 15:53

@LCM: 恩,就是这个问题呀!现在我已经解决啦!还是属性设置的不对呀!还是很感谢你啦

亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 17:47
其他回答(1)
0

把图表的边框去掉(或颜色设置成白色),然后在这个图表外再加个框就OK了

artwl | 园豆:16736 (专家六级) | 2012-02-20 13:38

你是说去掉XY轴吗?这个不行吧,我还要显示刻度呢

支持(0) 反对(0) 亮仔爱编程 | 园豆:191 (初学一级) | 2012-02-21 08:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册