C#:单击(如果适用)与验证事件

本文关键字:验证 事件 单击 如果 | 更新日期: 2023-09-27 18:00:57

我最近正在用visual C#开发windows窗体,我有一堆单选按钮组合在一起。

如果单击单选按钮,我需要调用一些方法,还需要进行一些验证。

所以我有两种方法,

public void doSomeStuff()
public bool valRadioButton1()

我可以在单击事件中调用doSomeStuff((,在单选按钮的验证事件中调用后者,但也可以在单击或验证事件中同时调用。

我的问题是,我用什么事件来称呼这些事件,有什么优点和缺点吗?或者有什么特别的方法更有效。现在看来,这两个事件都会做完全相同的事情,所以为什么要使用其中一个或另一个或两者。

C#:单击(如果适用)与验证事件

单选按钮与传统验证相结合有点奇怪。验证事件的设计似乎允许您在用户完成输入值时验证一次值,而不是在用户输入值时每次值都发生更改。这对于一个文本框来说是有意义的,您希望在其中查看已完成的文本,而不是用户键入的每个字符之后。但对于单选按钮来说,它有点晦涩。事实上,我认为您通常应该避免单选按钮的验证事件,而是使用容器的验证事件(单选按钮应该始终位于嵌入式容器中(。这允许键盘用户在不同的选项中选择/移动,以获得他们想要的选项,而无需在移动选项时重复验证。然后,当他们将焦点移出组框(或您使用的任何容器(时,您可以一次验证整个选项组。因此,这种行为与其他控件的验证行为更加一致。事实上,我认为在单个单选按钮上使用验证事件没有什么意义。我看到的唯一原因是,如果你想取消用户的新选择,而不引起额外的点击事件。但请注意,当没有选择单选按钮,并且用户第一次单击某个单选按钮时,将不会发生验证事件!没有单选按钮失去焦点,只有当控件失去焦点时才会发生验证事件。所以这就是为什么我认为你应该避免单选按钮上的验证事件,只使用容器的验证事件或单选按钮的点击事件。

此外,我认为如果你想对键盘用户友好,你应该将验证逻辑与点击逻辑分开,并适当地使用事件。基于所选选项启用控件之类的事情属于单选按钮的单击事件,但有关当前所选选项的错误和警告消息应属于容器的验证事件。

编辑:您特别询问了一个事件何时发生,而不是另一个事件。我将添加以下信息作为回应:

  1. 如果代码是导致所选单选按钮更改的原因,则将调用Validate,而不调用click,假设焦点随后传递到单选按钮(或容器,如果使用容器的Validate事件(
  2. 如果没有选择单选按钮,然后用户单击一个单选按钮(只有当控件失去焦点时才会进行验证(,则将在不调用validate的情况下调用Click(或者我应该说之前(。不过,最终会对单击的选项进行验证
  3. 如果您的验证处理程序未链接到以前选择的特定选项或其容器,则将在不调用validate的情况下调用Click(或者应该说之前(。但是,当这个选项(或容器(失去焦点时,它将被调用用于现在选择的选项(和容器(
  4. 如果查看该值的代码不要求所选选项在查看之前失去焦点,则可以在不调用validate的情况下调用Click

当控件值发生更改时,存在验证事件,这与控件值的更改方式无关。它的更改是因为刷新了数据源吗?它是由最终用户更改的吗?它是否是在计时器上更改的?没关系!

我会使用验证事件来评估某些内容是否有效。即使你知道"不可能以任何其他方式发生"。