简体   繁体   English

限制TextBox Visual Studio C#的内容

[英]Limiting Contents of a TextBox Visual Studio C#

I am trying to limit the user input so that users can only enter digits to a textBox named OrderID and only input letters to a textBox named CustomerName. 我试图限制用户输入,以便用户只能向名为OrderID的文本框输入数字,并且只能向名为CustomerName的文本框输入字母。

Is it possible to do this in Visual Studio Web Application Forms? 是否可以在Visual Studio Web应用程序表单中执行此操作? Coding in C#. 用C#编码。 If so, how can I this be done? 如果是这样,我该怎么办?

I must also deal with exceptions if a user tries to enter an invalid datatype once the above is implemented. 一旦实现了上述内容,如果用户尝试输入无效的数据类型,我也必须处理异常。

How can this be done? 如何才能做到这一点? Any help is much appreciated! 任何帮助深表感谢! :) :)

use regular expressions 使用正则表达式
for text use it- ^[a-zA-Z]*$ . 对于文本,请使用^[a-zA-Z]*$
use CompareValidator, for digits 使用CompareValidator,用于数字

<asp:TextBox ID="txt" runat="server />
<asp:CompareValidator ID="cv" runat="server" ControlToValidate="txt" Type="Integer"
   Operator="DataTypeCheck" ErrorMessage="Value must be an integer!" />

You can achieve this by extending the TextBox class, like this way: I have already done this for one project. 您可以通过扩展TextBox类来实现此目的,就像这样:我已经为一个项目做到了。

Add this line in AssemblyInfo.cs class: 在AssemblyInfo.cs类中添加以下行:

[assembly: WebResource("Web.Controls.Javascript.NumberBox.js", "text/javascript")]

C# Class: C#类:

public sealed class NumberBox : TextBox
{
    protected override void OnPreRender(EventArgs e)
    {
        RegisterIncludeScripts();

        this.Attributes.Add("onkeydown", "return NumberBox_KeyDown(this, event);");
        this.Attributes.Add("onkeyup", "return NumberBox_KeyUp(this, event);");
        this.Attributes.Add("onblur", "NumberBox_Blur(this);");
        this.Attributes.Add("onpaste", "NumberBox_Paste(this);");

        base.OnPreRender(e);
    }

    private void RegisterIncludeScripts()
    {
        this.Page.ClientScript.RegisterClientScriptResource(typeof(TextBox), "Web.Controls.Javascript.NumberBox.js");
    }

    public int Number
    {
        get
        {
            if (this.Text.Equals(String.Empty)) return -1;
            else return Convert.ToInt32(this.Text);
        }
    }
}

JavaScript: JavaScript:

function NumberBox_KeyDown(control, e) {
    var keynum = GetKeystroke(e);

    if (IsFuncKey(keynum))
        return true;

    var keychar = String.fromCharCode(keynum);

    if (NumberBox_IsExceedingLimit(control, control.value + keychar))
        return false;

    if (keynum >= 96 && keynum <= 105)
        return true;

    var numcheck = /\d/;
    return numcheck.test(keychar);
}

function NumberBox_KeyUp(control, e) {
    var keynum = GetKeystroke(e);

    if (IsFuncKey(keynum))
        return true;

    control.value = control.value.replace(/[^0-9 ]/g, '');
}

function NumberBox_Paste(control) {
    control.value = control.value.replace(/[^0-9 ]/g, '');
    if (NumberBox_IsExceedingLimit(control)) {
        control.value = control.value.substring(0, control.value.length - 1);
    }
}

function NumberBox_Blur(control) {
    control.value = control.value.replace(/[^0-9 ]/g, '');
    if (NumberBox_IsExceedingLimit(control)) {
        control.value = control.value.substring(0, control.value.length - 1);
    }
}

function NumberBox_IsExceedingLimit(control, value) {
    var maxValue = control.attributes["maxValue"].value;
    var value = String(value);

    if (value.length > maxValue) {
        return true;
    }
    return false;
}

function NumberBox_IsExceedingLimit_IsInsideBoundary(control, value) {
    var minValue = control.attributes["minValue"].value;
    var maxValue = control.attributes["maxValue"].value;
    var value = String(value);

    if (value.length >= minValue && value.length <= maxValue) {
        return true;
    }
    return false;
}

You can use compare validator, here is my sample how to check datatype: 您可以使用比较验证器,这是我的示例如何检查数据类型:

            <asp:TextBox ID="TextBoxServiceDate" CssClass="OneColumnText" runat="server" Text='<%# Bind("ServiceDate","{0:d}")  %>'
                ValidationGroup="update"></asp:TextBox>*
            <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="TextBoxServiceDate"
                Display="None" ErrorMessage="<% $resources:AppResource,ServiceDateRequired %>"
                ValidationGroup="update"></asp:RequiredFieldValidator>
            <asp:CompareValidator ID="CompareValidatorQuantity" runat="server" ControlToValidate="TextBoxServiceDate" ValidationGroup="update" Display="None"
                Type="Date" Operator="DataTypeCheck" ErrorMessage='<% $Resources:AppResource,NotValidDateTime %>' />
            <br />

In this sample there are two validators. 在此样本中,有两个验证器。 First is used only to check required field, second is used to check datatype, in this case Date. 第一个仅用于检查必填字段,第二个用于检查数据类型,在这种情况下为Date。 Of course you can also check digits if required, you can also use custom validator for more complex reqirements. 当然,如果需要,您还可以检查数字,也可以使用自定义验证器进行更复杂的要求。 This would look something like this: 看起来像这样:

    <asp:CustomValidator ID="CustomValidatorDate1" runat="server" ControlToValidate="DateFromTextBox"
        ErrorMessage='<% $resources:AppResource,NotValidDateTime %>' Display="Dynamic"
        onservervalidate="CustomValidatorDate1_ServerValidate"></asp:CustomValidator>

And the handler... 还有经理...

    protected void CustomValidatorDate1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (!string.IsNullOrEmpty(args.Value))
        {
            DateTime d = new DateTime();
            if (!DateTime.TryParse(args.Value, out d))
            {
                args.IsValid = false;
            }
            else
            {
                args.IsValid = true;
            }
        }
        else
        {
            args.IsValid = true;
        }
    }

To display validation message you can use dynamic mode or just validation summary like this: 要显示验证消息,您可以使用动态模式或仅使用验证摘要,如下所示:

<asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="Insert" />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM