본문 바로가기
카테고리 없음

c# - 마우스가 포인트 위에있을 때 차트 포인트의 값을보십시오

by 창용이랑 2021. 11. 11.
728x90
차트가 있고 포인터가 포인트에있을 때 사용자가 값을 볼 수 있기를 바랍니다.
finding the value of the points in a chart 페이지에서 digEmAll의 도움말을 사용하여 다음 코드를 작성할 수 있습니다.

Point? prevPosition = null; 
ToolTip tooltip = new ToolTip();  

void chart1_MouseMove(object sender, MouseEventArgs e) 
{     
    var pos = e.Location;     
    if (prevPosition.HasValue && pos == prevPosition.Value)         
        return;     
    tooltip.RemoveAll();     
    prevPosition = pos;     
    var results = chart1.HitTest(pos.X, pos.Y, false, ChartElementType.PlottingArea);     
    foreach (var result in results)     
    {         
        if (result.ChartElementType == ChartElementType.PlottingArea)         
        {            
            chart1.Series[0].ToolTip = "X=#VALX, Y=#VALY";          
        }    
    } 
} 


위의 코드를 사용하면 포인터가 시리즈에 가까울 때 값을 볼 수 있지만 포인터가 포인트에있을 때만 값을 볼 수있는 방법은 무엇입니까?
나는 바꿨다

int k = result.PointIndex;
if (k >= 0)
{
    chart1.Series[0].Points[k].ToolTip = "X=#VALX, Y=#VALY";
}


대신에

chart1.Series[0].ToolTip = "X=#VALX, Y=#VALY";


내 문제를 해결하기 위해 그러나 유용하지 않았습니다.
 
이 방법으로 코드를 수정해야합니다.

Point? prevPosition = null;
ToolTip tooltip = new ToolTip();

void chart1_MouseMove(object sender, MouseEventArgs e)
{
    var pos = e.Location;
    if (prevPosition.HasValue && pos == prevPosition.Value)
        return;
    tooltip.RemoveAll();
    prevPosition = pos;
    var results = chart1.HitTest(pos.X, pos.Y, false,
                                    ChartElementType.DataPoint);
    foreach (var result in results)
    {
        if (result.ChartElementType == ChartElementType.DataPoint)
        {
            var prop = result.Object as DataPoint;
            if (prop != null)
            {
                var pointXPixel = result.ChartArea.AxisX.ValueToPixelPosition(prop.XValue);
                var pointYPixel = result.ChartArea.AxisY.ValueToPixelPosition(prop.YValues[0]);

                // check if the cursor is really close to the point (2 pixels around the point)
                //if (Math.Abs(pos.X - pointXPixel) < 2 && Math.Abs(pos.Y - pointYPixel) < 2)
                //{
                    tooltip.Show("X=" + prop.XValue + ", Y=" + prop.YValues[0], this.chart1,
                                    pos.X, pos.Y - 15);
                //}
            }
        }
    }
}


아이디어는 마우스가 포인트와 매우 가까운 지 확인하는 것입니다. 2 주변의 픽셀은 (정확히 포인트에 있지 않을 가능성이 높으므로) 툴팁을 표시합니다.

 

출처 : https://pythonq.com/so/c%23/367714