首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinForms图表:如何在DragDrop事件中标识DataPoint?

WinForms图表:如何在DragDrop事件中标识DataPoint?
EN

Stack Overflow用户
提问于 2011-01-28 06:07:52
回答 1查看 1.7K关注 0票数 3

在我的C# WinForms应用程序中,我使用拖放将项从TreeView控件移动到图表控件。(这是一个带有作业列表的日程安排应用程序,用户可以将它们放到日程安排中)。当用户将一个项目放到图表上的现有DataPoint上时,我希望新项目成为一个DataPoint并替换旧项目(在队列中向下移动)。

下面是我为DragDrop事件处理程序准备的,它不太(但几乎)有效:

代码语言:javascript
复制
 private void chart1_DragDrop(object sender, DragEventArgs e)
 {
     if (draggedJob != null) // This is set when user starts dragging
     {
         HitTestResult testResult = chart1.HitTest(e.X, e.Y, ChartElementType.DataPoint);
         switch (testResult.ChartElementType)
         {
              case ChartElementType.DataPoint:
                  // This should happen if I dropped an item onto an existing DataPoint
                  // ...but testResult.ChartElementType is always "Nothing"
                  DataPoint existingPoint = (DataPoint)testResult.Object;
                  JobOrder jobToDisplace = (JobOrder)existingPoint.Tag;

                  ScheduleJob(draggedJob, jobToDisplace);
                  break;
              default:
                  //This happens every time (it adds the item to the end of the schedule)
                  ScheduleJob(draggedJob);
                  break;
         }                                        

         RefreshTreeView();
         RefreshChart();     

         draggedJob = null;
     }
 }

有没有人可以拯救我的理智,并帮助我弄清楚如何辨别用户正在将作业放到哪个DataPoint上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-28 06:52:25

您得到的鼠标位置(e.X,e.Y)是在屏幕坐标中。您必须将其映射到图表控件。修复:

代码语言:javascript
复制
var pos = chart1.PointToClient(new Point(e.X, e.Y));
HitTestResult testResult = chart1.HitTest(pos.X, pos.Y, ChartElementType.DataPoint);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4822478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档