Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止下划线“_&引用;在要添加的文本框内容的末尾_C#_String_Winforms_Textbox - Fatal编程技术网

C# 防止下划线“_&引用;在要添加的文本框内容的末尾

C# 防止下划线“_&引用;在要添加的文本框内容的末尾,c#,string,winforms,textbox,C#,String,Winforms,Textbox,我与尼克(已知姓名)合作 当用户注册时,您必须输入您的刻痕,同样,它不能包含符号(下划线除外),只能包含数字和字母 我使用我的文本框用户名的按键事件: private bool Handled = false; private void Username_KeyPress(object sender, KeyPressEventArgs e) { if (Char.IsLetterOrDigit(e.KeyChar)) this.Handled = false; else

我与尼克(已知姓名)合作

当用户注册时,您必须输入您的刻痕,同样,它不能包含符号(下划线除外),只能包含数字和字母

我使用我的
文本框
用户名的
按键
事件:

private bool Handled = false;

private void Username_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Char.IsLetterOrDigit(e.KeyChar)) this.Handled = false;
    else
    {
        if (e.KeyChar == '\b') this.Handled = false; //Backspace key
        else
        {
           if (e.KeyChar == '_' && !((TextBox)sender).Text.Contains("_") && ((TextBox)sender).Text.Length > 0) this.Handled = false;
            else this.Handled = true;
        }
    }

    e.Handled = Handled;
}
这段代码防止符号(与“u”不同),内容以“u”开头,并使用多个下划线“H_E_L_L_O”编写,但它们需要防止在结尾使用下划线,我的意思是:

允许:见鬼

预防:你好_

这可能吗

编辑:

我还使用了
String.Last()
,但结果是一样的:


你不能这样做,除非你能读懂用户的心思:)毕竟,用户可能想把
Hell\u o
放在你的例子中,但要键入,他们首先需要键入“Hell\u”,所以你不能在这一点上阻止他们。您可能要做的最好的事情就是处理UserName控件上的“验证”事件

private void UserName_Validating(object sender, CancelEventArgs e) {
    errorProvider1.SetError(UserName, "");
    if (UserName.Text.EndsWith("_")) {
        errorProvider1.SetError(UserName, "Stuff is wrong");
    }            
}

然后在你的“注册”按钮中点击或者其他什么,检查那个控件(或者你关心的任何控件)是否有错误

除非你能读懂用户的想法,否则你不能这样做:)毕竟,用户可能想像你的例子中那样输入
Hell\u o
,但要输入,他们首先需要输入“Hell\u”,所以你不能在那一点上阻止他们。您可能要做的最好的事情就是处理UserName控件上的“验证”事件

private void UserName_Validating(object sender, CancelEventArgs e) {
    errorProvider1.SetError(UserName, "");
    if (UserName.Text.EndsWith("_")) {
        errorProvider1.SetError(UserName, "Stuff is wrong");
    }            
}

然后在你的“注册”按钮中点击或者其他什么,检查那个控件(或者你关心的任何控件)是否有错误

您可以编写一个以字符串字符结尾的正则表达式。将
if
子句中的
SelectionStart
TextLength
进行比较难道不能解决这个问题吗?
this.Handled=false
?这不是
e.Handled
?这是什么意思:“并在“H_e_L_L_O”下使用了多个脚本”“@LarsTech Handled是一个私有boolYou可以编写一个以字符串字符结尾的正则表达式。如果
if
子句中的
SelectionStart
TextLength
进行比较,难道不能解决这个问题吗?
this.Handled=false
?这不是
e.Handled
?这是什么意思:“并且在”H_e_L_L_O“下使用了多个脚本”?@LarsTech Handled是一个私有bool不是最好使用
String.Last()
而不是
String.EndsWith()
?不是最好使用
String.Last()
而不是
String.EndsWith())