2016-10-29 260 views
0

當鼠標在圖表區域內的任何地方(如圖片)移動 時,如何顯示X軸和Y軸的值?移動鼠標時如何顯示X軸和Y軸的值?

enter image description here

HitTest方法不能應用於移動或它只能適用於點擊圖上?

請幫幫我。提前致謝。

The tooltip shows data outside the real area data drawn

+0

如果這是一個WinForms應用程序,那麼你可以處理'Control.MouseMove'事件。 MouseEventArgs參數包含X和Y屬性。 –

+0

是的,我在WinForms中使用Chart。 –

+0

你解決了你的問題嗎? – TaW

回答

0

其實Hittest方法工作在MouseMove就好了;它的問題在於,只有當你實際上是而不是 a DataPoint時纔會發生。

的上AxesValues可以檢索/從像素轉換的座標由這些軸功能:

ToolTip tt = null; 
Point tl = Point.Empty; 

private void chart1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (tt == null) tt = new ToolTip(); 

    ChartArea ca = chart1.ChartAreas[0]; 

    if (InnerPlotPositionClientRectangle(chart1, ca).Contains(e.Location)) 
    { 

     Axis ax = ca.AxisX; 
     Axis ay = ca.AxisY; 
     double x = ax.PixelPositionToValue(e.X); 
     double y = ay.PixelPositionToValue(e.Y); 
     string s = DateTime.FromOADate(x).ToShortDateString(); 
     if (e.Location != tl) 
      tt.SetToolTip(chart1, string.Format("X={0} ; {1:0.00}", s, y)); 
     tl = e.Location; 
    } 
    else tt.Hide(chart1); 
} 

注意,它們將不起作用圖表是忙擺出圖表元素或之前它已經這樣做了。儘管如此,MouseMove沒問題。

enter image description here

還要注意,示例顯示的原始數據,而x軸標籤顯示數據作爲DateTimes。使用

string s = DateTime.FromOADate(x).ToShortDateString(); 

或類似的東西將值轉換爲日期!

爲是實際plotarea內的支票使用這兩個實用的功能:

RectangleF ChartAreaClientRectangle(Chart chart, ChartArea CA) 
{ 
    RectangleF CAR = CA.Position.ToRectangleF(); 
    float pw = chart.ClientSize.Width/100f; 
    float ph = chart.ClientSize.Height/100f; 
    return new RectangleF(pw * CAR.X, ph * CAR.Y, pw * CAR.Width, ph * CAR.Height); 
} 

RectangleF InnerPlotPositionClientRectangle(Chart chart, ChartArea CA) 
{ 
    RectangleF IPP = CA.InnerPlotPosition.ToRectangleF(); 
    RectangleF CArp = ChartAreaClientRectangle(chart, CA); 

    float pw = CArp.Width/100f; 
    float ph = CArp.Height/100f; 

    return new RectangleF(CArp.X + pw * IPP.X, CArp.Y + ph * IPP.Y, 
          pw * IPP.Width, ph * IPP.Height); 
} 

如果你願意,你可以緩存InnerPlotPositionClientRectangle;您在更改數據佈局或調整圖表大小時需要這樣做。

+0

非常感謝!它運作良好。但是,它有一個問題:當我將鼠標移動到圖表外部時,該區域包含繪製的實際數據,工具提示也顯示數據,這不是我需要的東西。你有解決方案嗎? –

+0

啊,是的。你是對的。我們需要添加一個檢查內部Charatarea的Innerplotposition ..我已經更新了答案.. – TaW

+0

太棒了!謝謝親!它效果很好^^ –