C# WinForm中MaskedTextBox的KeyDown事件重复触发问题求助
解决MaskedTextBox按下Enter键触发两次事件的问题
直接修复方案
在你的mtbEnterAnswer方法中,处理完业务逻辑后添加事件标记代码,阻止事件继续传递,避免二次触发:
private void mtbEnterAnswer(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { MaskedTextBox maskedTextBox = (MaskedTextBox)sender; int.TryParse(maskedTextBox.Text, out int result); CheckAnswer(result); // 标记事件已处理,阻止后续触发逻辑 e.Handled = true; e.SuppressKeyPress = true; } }
额外排查点
如果上述方法无效,检查DrawAnswerTextBox方法是否被多次调用——每次调用都会给AnswerTextBox重复绑定KeyDown事件,导致按Enter时触发多次逻辑。可以在绑定事件前先移除旧绑定,或者确保该方法只执行一次:
void DrawAnswerTextBox() { AnswerTextBox.Location = new Point(371,186); AnswerTextBox.Size = new Size(395, 55); AnswerTextBox.Font = new Font("Microsoft Sans Serif", 25); AnswerTextBox.TextAlign = HorizontalAlignment.Center; // 先移除旧绑定,再添加新绑定,避免重复绑定事件 AnswerTextBox.KeyDown -= mtbEnterAnswer; AnswerTextBox.KeyDown += mtbEnterAnswer; this.Controls.Add(AnswerTextBox); }
内容的提问来源于stack exchange,提问作者Mohammad Ahmad
相关产品推荐
相关产品推荐

