2011-01-27 35 views
3

在我的C#WinForms應用程序中,我使用拖放操作將項目從TreeView控件移動到Chart控件。 (這是一個包含作業列表的計劃應用程序,用戶將它們放到計劃中)。當用戶將一個項目放到圖表上現有的DataPoint上時,我希望新項目成爲一個DataPoint並取代舊項目(將其移入隊列中)。WinForms圖表:如何在DragDrop事件中識別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; 
    } 
} 

誰能救我的理智並幫我找出我怎麼能知道哪些數據點用戶被丟棄工作到?

回答

3

您獲得的鼠標位置(e.X,e.Y)位於屏幕座標中。您必須將其映射到圖表控件。修復:

var pos = chart1.PointToClient(new Point(e.X, e.Y)); 
HitTestResult testResult = chart1.HitTest(pos.X, pos.Y, ChartElementType.DataPoint); 
+0

現在就像冠軍一樣拖放。謝謝! – 2011-01-27 22:58:21