protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (Option.SeriesCount == 0) { SetPieAndAzIndex(-1, -1); return; } for (int pieIndex = 0; pieIndex < Option.SeriesCount; pieIndex++) { for (int azIndex = 0; azIndex < Option.Series[pieIndex].Data.Count; azIndex++) { Angle angle = Angles[pieIndex][azIndex]; PointF pf = angle.Center; if (Drawing.CalcDistance(e.Location, pf) > angle.Outer) { continue; } if (Drawing.CalcDistance(e.Location, pf) < angle.Inner) { continue; } double az = Drawing.CalcAngle(e.Location, pf); if (az >= angle.Start && az <= angle.Start + angle.Sweep) { SetPieAndAzIndex(pieIndex, azIndex); if (tip.Text != angle.Text) { tip.Text = angle.Text; tip.Size = new Size((int)angle.TextSize.Width + 4, (int)angle.TextSize.Height + 4); } if (az >= 0 && az < 90) { tip.Top = e.Location.Y + 20; tip.Left = e.Location.X - tip.Width; } else if (az >= 90 && az < 180) { tip.Left = e.Location.X - tip.Width; tip.Top = e.Location.Y - tip.Height - 2; } else if (az >= 180 && az < 270) { tip.Left = e.Location.X; tip.Top = e.Location.Y - tip.Height - 2; } else if (az >= 270 && az < 360) { tip.Left = e.Location.X + 15; tip.Top = e.Location.Y + 20; } if (Option.ToolTip.Visible) { if (!tip.Visible) { tip.Visible = angle.Text.IsValid(); } } return; } } } SetPieAndAzIndex(-1, -1); tip.Visible = false; }