AI 用多了会失去思考耐心
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting;namespace TestForm {public partial class UserControl2 : UserControl{public UserControl2(){InitializeComponent();// 启用 UserControl 自身的键盘事件this.SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick | ControlStyles.UserMouse, true);this.SetStyle(ControlStyles.Selectable, true);this.TabStop = true;Chart ct = new Chart();ct.PreviewKeyDown += OnPreviewKeyDown;this.Controls.Add(ct);// 订阅 UserControl 自身的事件this.KeyDown += ChildControl_KeyDown;this.KeyUp += ChildControl_KeyUp;this.PreviewKeyDown += OnPreviewKeyDown;// 为所有现有控件订阅事件SubscribeToChildControls(this);// 为新添加的控件订阅事件this.ControlAdded += (s, e) => SubscribeToControl(e.Control);}private void OnPreviewKeyDown(object sender, PreviewKeyDownEventArgs e){switch (e.KeyCode){case Keys.Up:case Keys.Down:case Keys.Left:case Keys.Right:case Keys.Space:e.IsInputKey = true;break;}}private void SubscribeToChildControls(Control parent){foreach (Control control in parent.Controls){SubscribeToControl(control);SubscribeToChildControls(control); // 递归订阅子控件 }}private void SubscribeToControl(Control control){control.KeyDown += ChildControl_KeyDown;control.KeyUp += ChildControl_KeyUp;control.PreviewKeyDown += OnPreviewKeyDown;}private void ChildControl_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e){// 将空格键标记为输入键,这样KeyUp事件才会触发if (e.KeyCode == Keys.Space){e.IsInputKey = true;}}private void ChildControl_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.Space){Console.WriteLine("空格键按下 - 时间: " + DateTime.Now.ToString("HH:mm:ss.fff"));e.Handled = true; // 阻止默认处理 }if (e.KeyCode == Keys.Up){Console.WriteLine("上键按下 - 时间: " + DateTime.Now.ToString("HH:mm:ss.fff"));e.Handled = true; // 阻止默认处理 }if (e.KeyCode == Keys.Down){Console.WriteLine("下键按下 - 时间: " + DateTime.Now.ToString("HH:mm:ss.fff"));e.Handled = true; // 阻止默认处理 }if (e.KeyCode == Keys.Left){Console.WriteLine("左键按下 - 时间: " + DateTime.Now.ToString("HH:mm:ss.fff"));e.Handled = true; // 阻止默认处理 }if (e.KeyCode == Keys.Right){Console.WriteLine("右键按下 - 时间: " + DateTime.Now.ToString("HH:mm:ss.fff"));e.Handled = true; // 阻止默认处理 }if (e.KeyCode == Keys.Enter){Console.WriteLine("回车键按下 - 时间: " + DateTime.Now.ToString("HH:mm:ss.fff"));e.Handled = true; // 阻止默认处理 }}private void ChildControl_KeyUp(object sender, KeyEventArgs e){if (e.KeyCode == Keys.Space){Console.WriteLine("空格键释放 - 时间: " + DateTime.Now.ToString("HH:mm:ss.fff"));e.Handled = true; // 阻止默认处理 }}} }