检测哪个 ChartArea 被双击
Detect which ChartArea is being double-clicked
我有一个图表 (myChart),MyArea 中有更多 ChartArea,即 ChartAreasCollection。我必须确定是否在 select 集合的某个 ChartArea 中进行了双击。在下面编写的代码中,每个 ChartArea 都有相同的限制值 (x,y),因此 if 条件始终为真,即使在第一个区域上进行了点击也是如此。
每个图表区域都可以可见或不可见,所以要使用此功能,我必须检查计数器 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
自动定位,它也会返回结果..:[=16=]
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
不会被点击,它们也不会占用 space,其他的将移动到它们的位置。但是如果你设置固定位置,这 可能 改变,你可能确实需要添加检查 ca.Visible
...
我有一个图表 (myChart),MyArea 中有更多 ChartArea,即 ChartAreasCollection。我必须确定是否在 select 集合的某个 ChartArea 中进行了双击。在下面编写的代码中,每个 ChartArea 都有相同的限制值 (x,y),因此 if 条件始终为真,即使在第一个区域上进行了点击也是如此。
每个图表区域都可以可见或不可见,所以要使用此功能,我必须检查计数器 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
自动定位,它也会返回结果..:[=16=]
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
不会被点击,它们也不会占用 space,其他的将移动到它们的位置。但是如果你设置固定位置,这 可能 改变,你可能确实需要添加检查 ca.Visible
...