2017-01-02 2 views
0

Я пытаюсь помешать некоторым символам быть прописными, а все остальные должны быть.Преобразуйте все символы строки в верхний регистр, за исключением некоторых конкретных символов.

Например, если я пишу что-то в текстовом поле, он автоматически записывает все символы в верхнем регистре, но каждый раз, когда я ввожу букву «k», она должна быть строчной.

Кто-нибудь знает способ достижения этого?

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    // Navn/Name Text Box 


} 
+0

Я предлагаю в следующий раз при добавлении тега «WinForms» на вопрос, чтобы люди могли знать проще, если если есть WPF, Winforms, ASP.NET, Silverlight и т.д. – bradbury9

+0

На самом деле, я думаю, чем больше важная часть изменяет строку, не записывая результат в текстовое поле. Поэтому я бы не счел необходимым использовать тег winforms ... – wkl

+0

@wkl. Вот почему я бы сказал, что вопрос слишком широк. Он задает два вопроса. Первый из них - «Как я могу выборочно изменить обложку символов в строке?» _, А другой - «Как изменить текст в текстовом поле WinForms во время ввода пользователем?» _. Я также уверен, что оба вопроса заданы отдельно. – CodeCaster

ответ

3

В обработчике textBox3_TextChanged событий вы можете просто «правильный» текст и установить его обратно.
Вы должны помнить, позиции курсора (и выбор), так что пользователь не получает прерван во время набора текста:

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    int start = textBox3.SelectionStart; 
    int length = textBox3.SelectionLength; 
    textBox3.Text = textBox3.Text.ToUpper().Replace("K", "k"); 
    textBox3.SelectionStart = start; 
    textBox3.SelectionLength = length; 
} 

Примечание: это для Windows.Forms. Я предполагаю, что для wpf или asp или других каркасов ui часть с обработкой курсора будет отличаться.

2

Вот один подход

private void textBox3_TextChanged(object sender, EventArgs e) 
{ 
    textBox3.Text = new string(textBox3.Text.Select(x => x == 'k' || x == 'K' ? 'k' : char.ToUpper(x)).ToArray()); 
} 
-1

Если вы не хотите, чтобы пользователь вводил неверный ввод, вы можете использовать событие TextChanged (другие ответы) или обрабатывать события KeyDown и KeyUp. Проверьте эту ссылку для этого другого подхода.

https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx

+1

Нет, вы ** не ** используете события KeyDown и KeyUp для проверки ввода. Люди могут изменять текст (перетаскивать его или вырезать или вставлять через контекстное меню) с помощью мыши, и есть другие способы изменить содержимое элемента управления, чем через клавиатуру или мышь. – CodeCaster

0
  1. Во-первых, держать позицию курсора - где находится курсор.
  2. Затем вы вычисляете новую строку - я извлек условие на случай, если это не только 1 буква.
  3. Наконец, вы сохраняете новую строку и возвращаете каретку в ее положение.

    private static bool CalculateConditionForLowerCase(string stringLetter) 
    { 
        return stringLetter.ToLower() == "k"; 
    } 
    
    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
        if (string.IsNullOrEmpty(textBox1.Text)) 
        { 
         return; 
        } 
        var caretPosition = textBox1.SelectionStart; 
        var sb = new StringBuilder(); 
        foreach (var letter in textBox1.Text) 
        { 
         var stringLetter = letter.ToString(); 
         sb.Append(CalculateConditionForLowerCase(stringLetter) ? stringLetter.ToLower() : stringLetter.ToUpper()); 
        } 
        textBox1.Text = sb.ToString(); 
        textBox1.SelectionStart = caretPosition; 
    } 
    
Смежные вопросы