Преобразование текста в верхний регистр при вводе текста в текстовое поле

Я новичок в 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>

Затем наслаждайтесь...