【问题标题】:Textbox validation文本框验证
【发布时间】:2009-08-11 05:28:29
【问题描述】:

我正在开发基于 Windows 窗体的应用程序。

我想验证文本框的值。用户在文本框中仅输入数值, 现在我可以验证 keypressevent,但我想验证复制的值应该是数字然后只能粘贴(鼠标右键单击粘贴或 Ctrl+v)文本框。

【问题讨论】:

    标签: winforms validation textbox


    【解决方案1】:

    答案取决于您想要的反馈水平。如果您想给用户反馈,我建议使用 Validating 事件和 ErrorProvider。

    这是一个例子:http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/ErrorProvidernumbermustbeinarange.htm

    否则,只需绑定到 KeyDown 或 TextChanged 事件,并删除您不想出现的任何输入。根据您的确切验证要求,您可能还会发现 MaskedTextBox 很有用:http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx

    【讨论】:

      【解决方案2】:

      当用户将焦点放在文本框上时(假设已从某处复制了一个值),您可以检查复制到剪贴板的最后一个值,并根据您的验证条件禁用/移除控件的焦点。

      在 C# 中使用剪贴板的示例:http://www.codeproject.com/KB/shell/clipboard01.aspx

      【讨论】:

        【解决方案3】:

        你可以使用这样的东西。

            private void txtOrgao_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
                {
                    //Valida copy and paste com caracteres especiais
                    e.SuppressKeyPress = !Util.validaCaracteresEspeciaisClipBoard(txtOrgao);
                }
            }
        
            private void txtOrgao_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!Char.IsLetterOrDigit(Convert.ToChar(e.KeyChar)) &&
                    !Char.IsControl(Convert.ToChar(e.KeyChar)) &&
                    !Char.IsWhiteSpace(Convert.ToChar(e.KeyChar)))
                {
                    e.Handled = true;
                }
            }
        

        帮助类工具:

        public class Util
        {
            /// <summary>
            /// Valida caracteres especiais em textBox para suprimir o evento KeyPress
            /// Caracteres Inválidos: Simbolos
            /// </summary>
            /// <param name="caixaTexto">objeto TextBox</param>
            /// <returns></returns>
            static public Boolean validaCaracteresEspeciaisClipBoard(TextBox caixaTexto)
            {
                //Valida copy and paste com caracteres especiais
                String clip = String.Empty;
        
                if (Clipboard.ContainsText())
                {
                    clip = Clipboard.GetText().Substring(0, caixaTexto.MaxLength);
        
                    for (int tam = 0; tam < caixaTexto.MaxLength; tam++)
                    {
                        if (!Char.IsLetterOrDigit(clip[tam]) &&
                            !Char.IsControl(clip[tam]) &&
                            !Char.IsWhiteSpace(clip[tam]))
                        {
                            return false;
                        }
                    }
                }
        
                return true;
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-30
          • 2011-09-18
          • 2012-11-18
          • 1970-01-01
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多