Преобразование текста в верхний регистр при вводе текста в текстовое поле
Я новичок в Visual Studio и с помощью Visual Studio 2008.
В проекте я хочу сделать весь текст в верхнем регистре при вводе пользователем без нажатия клавиши shift или caps lock.
Я использовал этот код
TextBox1.Text = TextBox1.Text.ToUpper();
но он заглаживает символы после нажатия клавиши Enter.
Я просто хочу, чтобы символы отображались в верхнем регистре при вводе пользователем без нажатия клавиши смены или без блокировки.
Всего код страницы...
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
TextBox1.Text = TextBox1.Text.ToUpper();
}
}
Есть ли какое-либо решение, пожалуйста, направляйте меня.
Ответы
Ответ 1
Для этого существует определенное свойство. Он называется CharacterCasing, и вы можете установить его в верхний
TextBox1.CharacterCasing = CharacterCasing.Upper;
В ASP.NET вы можете попробовать добавить это в свой стиль текстового поля
style="text-transform:uppercase;"
Здесь вы можете найти пример: http://www.w3schools.com/cssref/pr_text_text-transform.asp
Ответ 2
Изменить (для ASP.NET)
После того, как вы отредактировали свой вопрос, вы используете ASP.NET. Там все по-другому (потому что в этом случае обратный путь к серверу довольно не рекомендуется). Вы можете делать то же самое с JavaScript (но обрабатывать глобализацию с помощью toUpperCase()
может быть затруднительно), или вы можете использовать классы CSS (полагаясь на реализацию в браузерах). Просто объявите это правило CSS:
.upper-case
{
text-transform: uppercase
}
И добавьте класс верхнего регистра в ваше текстовое поле:
<asp:TextBox ID="TextBox1" CssClass="upper-case" runat="server"/>
Общий (Старый) Ответ
но это заглавные буквы после нажатия клавиши Enter.
Это зависит от того, где вы положили этот код. Если вы поместите его, например, в событие TextChanged
оно будет TextChanged
.
У вас есть свойство, которое делает именно то, что вам нужно: CharacterCasing
:
TextBox1.CharacterCasing = CharacterCasing.Upper;
Он работает более или менее, но не очень хорошо обрабатывает локали. Например, в немецком языке ß это SS при преобразовании в верхний регистр (Institut für Deutsche Sprache), и это свойство не обрабатывает это.
Вы можете имитировать свойство CharacterCasing
добавив этот код в обработчик событий KeyPress
:
e.KeyChar = Char.ToUpper(e.KeyChar);
К сожалению,.NET Framework не обрабатывает это должным образом, и верхний регистр острого символа s возвращается без изменений. Существует версия ß в верхнем регистре, и она ẞ, и это может создать некоторую путаницу, например, слово, содержащее "ss", и другое слово, содержащее "ß", невозможно различить, если вы преобразуете в верхний регистр, используя "SS". "). Не забывайте, что:
Однако в 2010 году использование прописных букв стало обязательным в официальной документации при написании географических названий заглавными буквами.
Вы ничего не можете сделать, если не добавите надлежащий код для поддержки этих (и других) тонких ошибок в локализации.NET. Лучший совет, который я могу вам дать, это использовать собственный словарь для каждой культуры, которую вам нужно поддерживать.
Наконец, не забывайте, что это преобразование может сбивать с толку ваших пользователей: например, в Турции есть две разные версии заглавной буквы i.
Если обработка текста важна в вашем приложении, вы можете решить многие проблемы, используя специализированные библиотеки DLL для каждой локали, которую вы поддерживаете, как это делают текстовые процессоры.
Обычно я не использую стандартные функции.NET для строк, когда мне приходится иметь дело с проблемами, связанными с культурой (я сохраняю их только для текста в инвариантной культуре). Я создаю класс Unicode со статическими методами для всего, что мне нужно (подсчет символов, преобразования, сравнение) и множество специализированных производных классов для каждого поддерживаемого языка. Во время выполнения эти статические методы будут использовать текущее имя культуры потока, чтобы выбрать правильную реализацию из словаря и делегировать работу этому. Скелет может быть примерно таким:
abstract class Unicode
{
public static string ToUpper(string text)
{
return GetConcreteClass().ToUpperCore(text);
}
protected virtual string ToUpperCore(string text)
{
// Default implementation, overridden in derived classes if needed
return text.ToUpper();
}
private Dictionary<string, Unicode> _implementations;
private Unicode GetConcreteClass()
{
string cultureName = Thread.Current.CurrentCulture.Name;
// Check if concrete class has been loaded and put in dictionary
...
return _implementations[cultureName];
}
}
Затем у меня будет конкретная реализация для немецкого языка:
sealed class German : Unicode
{
protected override string ToUpperCore(string text)
{
// Very naive implementation, just to provide an example
return text.ToUpper().Replace("ß", "ẞ");
}
}
Реальная реализация может быть намного сложнее (не все ОС поддерживают верхний регистр ẞ), но принять в качестве доказательства концепции. Смотрите также этот пост для других деталей о проблемах Unicode в.NET.
Ответ 3
если вы можете использовать LinqToObjects в своем проекте
private YourTextBox_TextChanged ( object sender, EventArgs e)
{
return YourTextBox.Text.Where(c=> c.ToUpper());
}
Если вы не можете использовать LINQ (например, целевой проект FW -.NET Framework 2.0), то
private YourTextBox_TextChanged ( object sender, EventArgs e)
{
YourTextBox.Text = YourTextBox.Text.ToUpper();
}
Почему Text_Changed
Событие?
В кармане есть несколько событий ввода пользователя.
1-) OnKeyPressed
срабатывает (начинает работать), когда пользователь нажимает клавишу с клавиатуры после нажатия и отпускания клавиши
2-) OnKeyDown
срабатывает, когда пользователь нажимает клавишу с клавиатуры во время нажатия клавиш
3-) OnKeyUp
срабатывает, когда пользователь нажимает клавишу с клавиатуры и начинает запускать ключ (пользователь берет свой палец с клавиши)
Как вы видите, все три касаются события клавиатуры. Так что, если пользователь скопирует и вставляет некоторые данные в текстовое поле?
если вы используете одно из этих событий клавиатуры, тогда ваш код работает, когда и только пользователь использует клавиатуру. В примере, если пользователь использует экранную клавиатуру с щелчком мыши или копирует вставку данных, ваш код, который реализовывался на клавиатурных событиях, никогда не срабатывает (никогда начните работать)
Итак, и, к счастью, есть еще один вариант для работы: Событие Text Changed
..
Text Changed
Событие не волнует, откуда поступают данные. Даже может быть копия, сенсорный экран (например, телефоны или планшеты), виртуальная клавиатура, экранная клавиатура с щелчками мыши (какой-то банк операции используют это для большей безопасности, или может быть, ваш пользователь будет инвалидом, который не может нажать на стандартную клавиатуру) или инъекции кода;)..
Без материи!
Text Changed
Событие просто заботится о том, есть ли какие-либо изменения в его области компонента ответственности (здесь, область Your TextBox Text
) или нет..
Если произойдут какие-либо изменения, то ваш код, который был реализован при изменении текста, изменился.
Ответ 4
**/*Css Class*/**
.upCase
{
text-transform: uppercase;
}
<asp:TextBox ID="TextBox1" runat="server" Text="abc" Cssclass="upCase"></asp:TextBox>
Ответ 5
установите свойство CssClass в текстовое поле 1 в "cupper", затем в содержимом страницы создайте новый класс css:
<style type="text/css">.cupper {text-transform:uppercase;}</style>
Затем наслаждайтесь...