You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:07:08