【问题标题】:What validation events are raised for the TextBox control?为 TextBox 控件引发了哪些验证事件?
【发布时间】:2011-06-03 10:08:45
【问题描述】:

当文本框的值从代码和平改变并且文本框被验证或失去焦点并且事件不会在按键时触发时,是否会触发任何事件,因为我有很多计算并且不可能在每次按键时都这样做

【问题讨论】:

  • 我已经尝试过验证、验证、textchange、keypress、lostfocus 验证和验证,当使用 textbox.text="" 更改文本框值并且每次更改时都会触发 textchanged (按键和粘贴)任何其他事件.......
  • 我在下面的my answer 中解决了这个问题。您需要将验证代码放入一个单独的方法中,您可以从 ValidatingValidated 事件(以处理文本框失去焦点的情况)以及在您设置 Text 属性的任何位置调用代码。有什么理由不适合你?
  • @Cody Gray 设置 Text 属性时未触发验证事件
  • “and”一词的意思是“也”或“除了”。再次阅读我所说的内容:“您需要将验证代码放入一个单独的方法中,您可以从ValidatingValidated 事件中调用该方法(以处理文本框失去焦点的情况)和 从您在代码中设置Text 属性的任何位置开始。”我没有声称在设置 Text 属性时触发了 either 事件。我在下面的回答更详细地涵盖了这一点。你读过吗?
  • @Cody Gray 对不起,我在回复之前错过了你的回答,现在你的观点对我来说很清楚了,我已经尝试触发在设置 text 属性时验证的事件,但问题是这个属性在几个地方发生了变化,我的代码中有很多重复,这就是我研究这个事件的原因,请注意我有 350 个文本框,每个文本框都从至少 5 个地方更改

标签: c# .net winforms validation textbox


【解决方案1】:

这是 TextBox 调用事件的顺序:

// Reference : http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validated.aspx
1) Enter  
2) GotFocus
3) Leave
4) Validating
5) Validated
6) LostFocus

这应该可以帮助您决定要将代码放在哪里。

【讨论】:

    【解决方案2】:

    当文本框的值通过代码以编程方式更改时,没有任何事件可以满足您提出的要求,但不是当用户输入文本时。 TextChanged 事件将会以任何一种方式引发(这是相当直观的——文本值正在改变,而计算机不知道也不关心 什么 负责改变它)。正如此事件的documentation 所示:

    用户输入或将Text 属性设置为新值会引发TextChanged 事件。

    如果您在将文本添加到代码中的文本框时需要运行自定义验证逻辑,则需要自己调用包含验证逻辑的任何方法。将其提取到一个单独的方法中,您可以从Validating/Validated 事件处理程序从代码中设置文本框Text 属性的所有位置调用该方法。

    作为已发布的其他答案的补充,我强烈建议使用Validating(如果您希望能够取消验证)或Validated 事件来处理文本框失去焦点,而不是比名称更明显的LostFocus 事件。

    【讨论】:

      【解决方案3】:

      您可以使用LostFocusValidated 事件。

      【讨论】:

        【解决方案4】:

        使用成员变量。

        private bool _changeByCode;
        
        
        public void DoSomeChanges()
        {
            _changeByCode = true;
            textbox1.Text = "Hello";
            _changeByCode = false;
        }
        
        public void Textbox1_Change(object source, EventArgs e)
        {
            if (_changeByCode)
                return;
        
             //do your validation here.
        }
        

        【讨论】:

        • 这个答案正好相反
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 2023-03-06
        • 2011-04-16
        相关资源
        最近更新 更多