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

时间:2011-07-01 12:28:31

标签: c# winforms

我最近使用visual C#处理Windows窗体,我有一堆组合在一起的单选按钮。

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

所以我有两种方法,

public void doSomeStuff()

public bool valRadioButton1()

我可以在click事件中调用doSomeStuff(),然后在radiobutton的验证事件中调用后者,但我也可以在click事件或验证事件中调用它们。

我的问题是,我会用什么方法来称呼它们有什么优点和缺点?或者是否有任何特定方式更有效。现在似乎两个事件都会完全相同,所以为什么要使用一个或另一个或两者。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

另外,我认为如果你想对键盘用户好一点,你应该将验证逻辑与点击逻辑分开并适当地使用事件。根据选择的选项启用控件的操作属于单选按钮的单击事件,但有关当前所选选项的错误和警告消息应该放在容器的验证事件中。

编辑:您具体询问了一个事件何时发生而不是另一个事件。我会添加这些信息以回应:

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