-3

我遇到了一个问题,我希望有人能帮助我:) 我有一个文本框,我想限制用户,这样就不允许有两个 \ 彼此之后。我将它用于文件夹。例如: C\temp\test\ 现在我想让它无法键入 C\temp\test\\

我已经尝试过搜索这个问题,但我找不到这样的东西。所以我希望这是可能的:)

这是我的文本框的代码现在如何

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        try
        {
            Regex regex = new Regex(@"[^C^D^A^E^H^S^T^]");
            MatchCollection matches = regex.Matches(textBox1.Text);
            if (matches.Count > 0)
            {
                MessageBox.Show("Character niet toegestaan!");
                textBox1.Text = "";
            }

            clsOpslagMedium objOpslag;  // definieert type object 
            objOpslag = new clsOpslagMedium();  // creert opject in memory
            objOpslag.DriveLetterString = textBox1.Text;
        }
        catch (Exception variableEx1)
        {
            MessageBox.Show("Foutmelding: " + variableEx1.Message);
        }
    }

我希望有人可以举一些例子,并且我提供了足够的信息:)

4

3 回答 3

3

一种简单的方法是简单地替换字符串。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    //get the current cursor position so we can reset it 
    int start = textBox1.SelectionStart;

    textBox1.Text = Regex.Replace(textBox1.Text, @"\\\\+", @"\");

    //make sure the cursor does reset to the beginning
    textBox1.Select(start, 0);
}

围绕替换的额外代码确保光标不会重置到文本框的开头(当您设置Text属性时会发生这种情况)。

于 2013-06-19T14:24:16.550 回答
0

您需要找到所有\-sequences ( \\, \\\, \\\\, ...) 并将其替换为\. 您可以将正则表达式用于搜索序列

样本:

      string test=@"c:\\\adas\\dasda\\\\\\\ergreg\\gwege";
       Regex regex = new Regex(@"\\*");


       MatchCollection matches = regex.Matches(test);
        foreach (Match match in matches)
        {
            if (match.Value!=string.Empty)
                test = ReplaceFirst(test, match.Value, @"\");
        }
于 2013-06-19T14:27:15.003 回答
0

textreplace 在我的情况下不起作用。当用户在输入超过一个 \ 时离开框时,我需要显示一个错误

如果这是您真正想要的,则需要使用ErrorProvider。在表单中添加一个,然后将以下代码添加到 texbox 的Validating事件中,并确保CausesValidation文本框是正确的

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if(Regex.IsMatch(textBox1.Text, @"\\\\+"))
    {
        e.Cancel = true;
        errorProvider1.SetError(textbox1, @"\\ Is not allowed");
    }
    else
    {
        errorProvider1.SetError(textbox1, null);
    }
}

如果他们输入错误,这将!在文本框旁边显示,并在他们尝试离开文本框时强制他们更正。

于 2013-06-19T14:50:09.857 回答