2013-06-19 2 views
-3

Я столкнулся с проблемой, я надеюсь, что кто-то может мне помочь :) У меня есть текстовое поле, и я хочу ограничить пользователей, чтобы он не был разрешено иметь два \ после друг друга. Я использую его для папок. например: C \ temp \ test \ теперь я хочу сделать невозможным набрать C \ temp \ test \\Текстовое поле не позволяет набирать «» 2 раза друг за другом

Я пробовал искать некоторые проблемы для этой проблемы, но я не мог найти ничего подобного , поэтому я надеюсь, что это возможно :)

Херес код моего текстового поля, как это теперь

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); 
     } 
    } 

Я надеюсь, что кто-то может дать несколько примеров, и что я предоставил достаточно информации :)

+0

Почему бы вам просто не использовать 'textBox1.Text.Contains (@" \\ ")', чтобы проверить, есть ли у вас 2 \\ рядом друг с другом? –

+0

Пожалуйста, не публикуйте дважды тот же самый вопрос. –

+0

Извините, pierre, я столкнулся с проблемой и разместил ее tiwce, я не хотел этого делать – Ricje20

ответ

0

a textreplace isn't working in my case. i need an error shown up when a user leaves the box when he types more then one \

Если это то, что вы действительно хотите, вы должны использовать ErrorProvider. Добавьте один в форму затем добавьте следующий код Validating событию texbox и быть уверенным, что 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); 
    } 
} 

Это позволит сделать ! отображаться рядом с текстовым полем, если они печатают неправильно и силы их исправить, когда они попытаются покинуть текстовое поле.

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 свойства).

+0

Будет ли это работать, если кто-то вставил «c: \ temp \\\»? – EkoostikMartin

+0

Да, он заменит любое количество последовательных обратных косых черт одним экземпляром. – keyboardP

+0

он мог протестировать в цикле 'while (textBox1.Text.Contains (@" \\ ")) {textBox1.Text = Regex.Replace (textBox1.Text, @" \\ + ", @" \ "); } ' –

0

Вам нужно найти все \ -последовательности (\\, \\\, \\\\, ...) и заменить, что на \. Вы можете использовать регулярные выражения для поиска последовательностей

образца:

 string [email protected]"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, @"\"); 
     } 
+0

Можете ли вы привести небольшой пример? ~ спасибо за ответ! – Ricje20

Смежные вопросы