Диаграмма WinForms: Как я могу определить DataPoint в событии DragDrop? - PullRequest
3 голосов
/ 28 января 2011

В моем приложении C # WinForms я использую перетаскивание для перемещения элементов из элемента управления TreeView в элемент управления Chart.(Это приложение для планирования со списком заданий, и пользователь помещает их в расписание).Когда пользователь помещает элемент в существующую DataPoint на диаграмме, я хочу, чтобы новый элемент стал DataPoint и сместил старый (перемещая его вниз в очереди).

Вот что у меня есть для DragDropОбработчик событий, который не совсем (но почти) работает:

 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 пользователь сбрасывает задание?

1 Ответ

3 голосов
/ 28 января 2011

Позиция мыши, которую вы получаете (eX, eY), находится в экранных координатах.Вы должны отобразить его на элемент управления диаграммы.Исправить:

var pos = chart1.PointToClient(new Point(e.X, e.Y));
HitTestResult testResult = chart1.HitTest(pos.X, pos.Y, ChartElementType.DataPoint);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...