當鼠標在圖表區域內的任何地方(如圖片)移動 時,如何顯示X軸和Y軸的值?移動鼠標時如何顯示X軸和Y軸的值?
的HitTest
方法不能應用於移動或它只能適用於點擊圖上?
請幫幫我。提前致謝。
The tooltip shows data outside the real area data drawn
當鼠標在圖表區域內的任何地方(如圖片)移動 時,如何顯示X軸和Y軸的值?移動鼠標時如何顯示X軸和Y軸的值?
的HitTest
方法不能應用於移動或它只能適用於點擊圖上?
請幫幫我。提前致謝。
The tooltip shows data outside the real area data drawn
其實Hittest
方法工作在MouseMove
就好了;它的問題在於,只有當你實際上是而不是 a DataPoint
時纔會發生。
的上Axes
Values
可以檢索/從像素轉換的座標由這些軸功能:
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
沒問題。
還要注意,示例顯示的原始數據,而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
;您在更改數據佈局或調整圖表大小時需要這樣做。
非常感謝!它運作良好。但是,它有一個問題:當我將鼠標移動到圖表外部時,該區域包含繪製的實際數據,工具提示也顯示數據,這不是我需要的東西。你有解決方案嗎? –
啊,是的。你是對的。我們需要添加一個檢查內部Charatarea的Innerplotposition ..我已經更新了答案.. – TaW
太棒了!謝謝親!它效果很好^^ –
如果這是一個WinForms應用程序,那麼你可以處理'Control.MouseMove'事件。 MouseEventArgs參數包含X和Y屬性。 –
是的,我在WinForms中使用Chart。 –
你解決了你的問題嗎? – TaW