繁体   English   中英

检测双击哪个ChartArea

[英]Detect which ChartArea is being double-clicked

我在MyArea中有一个图表(myChart)和更多ChartArea,它是ChartAreasCollection。 我必须确定是否在集合的某个ChartArea中进行双击以选择它。 使用下面编写的代码,每个ChartArea都具有相同的限制值(x,y),因此if-condition始终为true,即使在第一个区域上完成了单击。

每个图表都可以显示或不显示,因此使用此功能我必须检查计数器ActiveAreas,如果可见多于一个。

private void chartInForm_DoubleClick(object sender, EventArgs e)
{
    if (ActiveAreas > 1)
    {
        Point mouse = ((MouseEventArgs)e).Location;

        foreach (ChartArea ca in MyArea)
        {
            if (mouse.X > ca.Position.X &&
                mouse.X < ca.Position.X + ca.Position.Width * myChart.Width / 100 &&
                mouse.Y > ca.Position.Y &&
                mouse.Y < ca.Position.Y + ca.Position.Height * myChart.Height / 100)
            MessageBox.Show(ca.Name);
        }

    }
}

这应该有所帮助:

private void chartInForm_MouseDoubleClick(object sender, MouseEventArgs e)
{
    foreach(ChartArea ca in chartInForm.ChartAreas)
    {
        if (ChartAreaClientRectangle(chartInForm, ca).Contains(e.Location))
        { 
            Console.WriteLine(" You have double-clicked on chartarea " +  ca.Name; 
            break; 
        }
    }
}

关键是在计算CA的像素位置时使用Position.ToRectangleF ; 即使ChartArea自动定位,它也会带回结果。:

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);
}

请注意,默认情况下不会单击不可见的ChartAreas ,也不会占用空间,其他人将移动到其位置。 但如果您设置固定位置,这可能会改变,您可能确实需要添加一个检查ca.Visible ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM