Вы можете подклассифицировать элемент управления 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 (подсказка: это может быть статическое поле). Зачем? Потому что вы не знаете, что еще попросит клиент для следующего.
Что значит уровень приложения? вы всегда можете использовать '.ToUpper()' –
В приложении много форм. И элементы управления сеткой, текстовые поля и формы. Я имею в виду, если возможно, я хочу реализовать его в центре, в какой-то момент. Может быть, нажатие клавиши и т. Д. – Ayhan
Все входные данные должны быть в верхнем регистре. Не только конкретные. Возможно, перехват очереди сообщений для нажатия клавиши и т. Д. Может решить проблему. – Ayhan