using System; using System.Windows.Forms; using System.Windows.Forms.Automation; namespace PKHeX.WinForms.Controls; /// /// PictureBox control that can be focused and selected. /// /// Draws a focus rectangle, and can be tabbed between, raising events for screen readers. public class SelectablePictureBox : PictureBox { public SelectablePictureBox() => SetStyle(ControlStyles.Selectable, TabStop = true); public static int FocusBorderDeflate { get; set; } protected override void OnMouseDown(MouseEventArgs e) { Focus(); base.OnMouseDown(e); } protected override void OnEnter(EventArgs e) { Invalidate(); base.OnEnter(e); AccessibilityObject.RaiseAutomationNotification(AutomationNotificationKind.Other, AutomationNotificationProcessing.All, AccessibleDescription ?? AccessibleName ?? ""); } protected override void OnLeave(EventArgs e) { Invalidate(); base.OnLeave(e); } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); if (!Focused) return; var rc = ClientRectangle; rc.Inflate(-FocusBorderDeflate, -FocusBorderDeflate); ControlPaint.DrawFocusRectangle(pe.Graphics, rc); } }