C# 将焦点更改为combobox时发生了一些奇怪的情况

C# 将焦点更改为combobox时发生了一些奇怪的情况,c#,C#,此事件非常简单,当用户输入错误文本时,输出错误消息并返回到上一个控件(在本例中,控件为combobox)。然而,它并没有像预期的那样工作,事实上,它输出了两次错误消息,此外,每当我单击该框时,它都会再次输出两次。当我调试程序时,我发现当Focus()调用时,它会立即跳转到验证事件,这就是错误消息输出两次的原因。问题是为什么它只输出两次而不是循环 此处理程序连接到哪个事件?发件人每次都不同吗?我尝试了相同的代码,只显示了一个消息框。是因为您已经注册了两次事件吗?这是由MessageBox+Focu

此事件非常简单,当用户输入错误文本时,输出错误消息并返回到上一个控件(在本例中,控件为combobox)。然而,它并没有像预期的那样工作,事实上,它输出了两次错误消息,此外,每当我单击该框时,它都会再次输出两次。当我调试程序时,我发现当Focus()调用时,它会立即跳转到验证事件,这就是错误消息输出两次的原因。问题是为什么它只输出两次而不是循环

此处理程序连接到哪个事件?发件人每次都不同吗?我尝试了相同的代码,只显示了一个消息框。是因为您已经注册了两次事件吗?这是由MessageBox+Focus引起的,这些方法会在焦点更改时触发事件中推拉焦点。不要这样做,设置e.Cancel=true以防止用户选项卡失控。使用ErrorProvider进行友好的错误报告。该案例发生在我单击datetimepicker控件时,我认为原因可能正如Hans Passant所说。
  private void _comboClearingCode_Validating(object sender, CancelEventArgs e)
    {

        string clearingCodeText = _comboClearingCode.Text;
        //MessageBox.Show(clearingCodeText);
        int count = 0;
        foreach (string item in _comboClearingCode.Items)
        {
            if (clearingCodeText == item)
                break;
            count++;
        }
        if (count == _comboClearingCode.Items.Count)
        {
            MessageBox.Show("please input a valid client code");
            _comboClearingCode.Focus();
        }
    }