2014-01-25 4 views
1

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

Есть ли способ сделать это на уровне приложения?

+0

Что значит уровень приложения? вы всегда можете использовать '.ToUpper()' –

+0

В приложении много форм. И элементы управления сеткой, текстовые поля и формы. Я имею в виду, если возможно, я хочу реализовать его в центре, в какой-то момент. Может быть, нажатие клавиши и т. Д. – Ayhan

+0

Все входные данные должны быть в верхнем регистре. Не только конкретные. Возможно, перехват очереди сообщений для нажатия клавиши и т. Д. Может решить проблему. – Ayhan

ответ

1

Решение 1: если вы хотите прочитать UserInput в UpperCase вы можете использовать ToUpper() метод.

Попробуйте:

String str=textBox1.Text.ToUpper(); 

Решение 2:

если вы хотите Displayand читать UserInput в UpperCase, вы можете справиться с TextChanged событие TextBox, как показано ниже:

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     textBox1.Text = textBox1.Text.ToUpper(); 
     textBox1.Select(textBox1.Text.Length, 0); 
    } 
0

Вы можете написать событие KeyPress один раз.

private void txtBox_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar >= 'a' && e.KeyChar <= 'z') 
     e.KeyChar -= (char)32; 
    } 

32 - просто разница в значениях ASCII между строчными и прописными буквами.

+0

Реализация этого для формы будет лучше. – Ayhan

+0

Хотя это аккуратный трюк, он не сработает, когда пользователи вводят буквы вне базового латинского алфавита. –

0

Вы можете подклассифицировать элемент управления TextBox, создать производный класс, который работает только с прописными буквами, и использовать производный класс вместо исходного TextBox.

Это возможный способ ее реализации:

using System; 

namespace UpperCaseTextBox 
{ 
    public class UpperCaseTextBox : System.Windows.Forms.TextBox 
    { 
     protected override void OnTextChanged(EventArgs e) 
     { 
      var selectionStart = this.SelectionStart; 
      var selectionLength = this.SelectionLength; 
      this.Text = this.Text.ToUpper(); 
      this.SelectionStart = selectionStart; 
      this.SelectionLength = selectionLength; 
      base.OnTextChanged(e); 
     } 
    } 
} 

Приведенный выше код был проверен, хотя это только для demostration.

Примечание 1: Я рекомендую сделать это в отделенном проекте dll, его будет проще использовать (вы должны сделать , компилировать , создать элемент управления, прежде чем поместить его в конструктор форм) и поддерживать. Если вы решите создать dll, помните, что вам нужно добавить ссылку в dll в System.Windows.Forms, а также что вам нужна ссылка на вашу dll в приложении winforms для ее использования.

Примечание 2: Возможно, вам будет интересно создать вариант этого, добавив новое свойство, чтобы установить TextBox в нормальный, только в верхнем или нижнем регистре. Вы также можете создать механизм для управления этим свойством для всех экземпляров вашего AppDomain (подсказка: это может быть статическое поле). Зачем? Потому что вы не знаете, что еще попросит клиент для следующего.

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