在C#中,如何在使用bindingNavigator时取消默认的鼠标单击事件

在C#中,如何在使用bindingNavigator时取消默认的鼠标单击事件,c#,winforms,data-binding,bindingsource,C#,Winforms,Data Binding,Bindingsource,我是一名新的C#用户,现在在使用BindingNavigator时遇到了一个问题 我正在使用bindingNavigator更新数据库表中的记录。在我离开当前更新的记录并通过单击“下一步”按钮输入下一条记录之前,我将执行一些验证,如果有任何错误,我希望它会发出警告,让我有机会更正错误字段,而不是移动到下一条记录 我在BindingNavigator MoveNextItem\u MouseDown事件中添加了一些行,但即使当前记录有一些问题(字段有一些逻辑连接),它仍然会移动到下一项。这里有专家

我是一名新的C#用户,现在在使用BindingNavigator时遇到了一个问题

我正在使用bindingNavigator更新数据库表中的记录。在我离开当前更新的记录并通过单击“下一步”按钮输入下一条记录之前,我将执行一些验证,如果有任何错误,我希望它会发出警告,让我有机会更正错误字段,而不是移动到下一条记录


我在BindingNavigator MoveNextItem\u MouseDown事件中添加了一些行,但即使当前记录有一些问题(字段有一些逻辑连接),它仍然会移动到下一项。这里有专家能帮我解决这个问题吗?非常感谢

您有两种方法:要么覆盖
WndProc
并防止鼠标单击窗口消息调用基本的
WndProc
,要么简单地覆盖
OnMouseClick

class Hello : BindingNavigator
{
    private bool canFire = false;
    protected override void OnMouseClick(MouseEventArgs e) // second approach
    {
        // don't call base method so that event doesn't fire up
        if (this.canFire)
             base.OnMouseClick(e);
    }
}

我知道这是旧的。。但对其他人来说。。。 您应该使用普通按钮,只使用验证事件,如果验证失败,则取消验证。 控件不会在设计器中显示该属性,但您仍然可以设置它:bindingnavigator.CausesValidation=true; 我在表单加载中执行此操作

光靠这个还不行。 您还需要设置焦点。 bindingnavigator.focus();
我在bindingnavigator\u ItemClicked事件中执行此操作,因此无论单击哪个按钮都会发生。

谢谢!我得到了它,我想重写所有的导航按钮,换一种说法,我不会使用它原来的按钮,我会自己创建它们。这对我来说会容易得多。谢谢