Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在鼠标单击上拾取Mschart图例项?_C#_Charts_Legend_Mschart_Mouseclick Event - Fatal编程技术网

C# 如何在鼠标单击上拾取Mschart图例项?

C# 如何在鼠标单击上拾取Mschart图例项?,c#,charts,legend,mschart,mouseclick-event,C#,Charts,Legend,Mschart,Mouseclick Event,当我单击图例中的项目时, 我希望输出为文本(项目的图例) 单击“投影”图例项, 我希望它在文本框中显示为“投影” 有办法吗?以下是我在评论中提到的粗略计算: 首先,我们使用一个函数将图例位置从百分比转换为像素: RectangleF LegendClientRectangle(Chart chart, Legend L) { RectangleF LAR = L.Position.ToRectangleF(); float pw = chart.ClientSize.Width

当我单击图例中的项目时, 我希望输出为文本(项目的图例) 单击“投影”图例项, 我希望它在文本框中显示为“投影”


有办法吗?

以下是我在评论中提到的粗略计算:

首先,我们使用一个函数将图例位置从百分比转换为像素:

RectangleF LegendClientRectangle(Chart chart, Legend L)
{
    RectangleF LAR = L.Position.ToRectangleF();
    float pw = chart.ClientSize.Width / 100f;
    float ph = chart.ClientSize.Height / 100f;
    return new RectangleF(pw * LAR.X, ph * LAR.Y, pw * LAR.Width, ph * LAR.Height);
}
接下来,我们对
鼠标进行编码单击
以获得属于单击位置的
系列

private void chart1_MouseClick(object sender, MouseEventArgs e)
{
    Point mp = e.Location;
    Legend L = chart1.Legends[0];
    RectangleF LCR = LegendClientRectangle(chart1, L);

    if ( LCR.Contains(mp) )
    {
        int yh = (int) (LCR.Height / chart1.Series.Count);
        int myRel = (int)(mp.Y - LCR.Y);
        int ser = myRel / yh;             // <--- this is the series index
        Series S = chart1.Series[ser];    // add check here!
        // decide which you have set and want to use..:
        string text = S.LegendText != "" ?  S.LegendText : S.Name;
        Console.WriteLine("Series # " + ser + " ->  " + text);
    }
}

这是一个简短但很好的问题。不幸的是,分析图例项布局所需的所有属性都被隐藏。您可以创建一个自定义图例并计算其位置,但对于原始图例,最好是进行粗略计算,最好使用一些假设以简化操作,就像它们都在一个垂直行中一样。。
private void chart1_MouseClick(object sender, MouseEventArgs e)
{
    HitTestResult hit = chart1.HitTest(e.X, e.Y);
    Series s = null;
    if (hit != null) s = hit.Series;
    if (s != null) 
    {
       string text = s.LegendText != "" ?  s.LegendText : s.Name;
       Console.WriteLine("Series # " + chart1.Series.IndexOf(s) + " ->  " + text);
    }
}