Как удалить последний введенный пользователем символ (программная реализация backspace)?
Нажатием кнопки нужно удалить последний введенный пользователем символ (аналог backspace). На данный момент не могу разобраться с принципом работы.
Пытался сделать через maskedTextBox1.Text.Length, но в этом случае показывается общая длинна маски, а не количество введенных пользователем символов.
Пытался сделать через while, где сравнивал в цикле символы с конца, и если, символ не был равен цифре, то считал, что это символ маски. Тоже не вышло. Хотя возможно я неверно задал условия цикла или проверки символа.
Жду любых советов или мнений, как это можно сделать.
- Вопрос задан более трёх лет назад
- 195 просмотров
Как удалить последний символ в textbox c
Для ввода и редактирования текста предназначены текстовые поля — элемент TextBox. Так же как и у элемента Label текст элемента TextBox можно установить или получить с помощью свойства Text.
По умолчанию при переносе элемента с панели инструментов создается однострочное текстовое поле. Для отображения больших объемов информации в текстовом поле нужно использовать его свойства Multiline и ScrollBars . При установке для свойства Multiline значения true, все избыточные символы, которые выходят за границы поля, будут переноситься на новую строку.
Кроме того, можно сделать прокрутку текстового поля, установив для его свойства ScrollBars одно из значений:

- None : без прокруток (по умолчанию)
- Horizontal : создает горизонтальную прокрутку при длине строки, превышающей ширину текстового поля
- Vertical : создает вертикальную прокрутку, если строки не помещаются в текстовом поле
- Both : создает вертикальную и горизонтальную прокрутку
Автозаполнение текстового поля
Элемент TextBox обладает достаточными возможностями для создания автозаполняемого поля. Для этого нам надо привязать свойство AutoCompleteCustomSource элемента TextBox к некоторой коллекции, из которой берутся данные для заполнения поля.
Итак, добавим на форму текстовое поле и пропишем в код события загрузки следующие строки:
public partial class Form1 : Form < public Form1() < InitializeComponent(); AutoCompleteStringCollection source = new AutoCompleteStringCollection() < "Кузнецов", "Иванов", "Петров", "Кустов" >; textBox1.AutoCompleteCustomSource = source; textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; > >

Режим автодополнения, представленный свойством AutoCompleteMode , имеет несколько возможных значений:
- None : отсутствие автодополнения
- Suggest : предлагает варианты для ввода, но не дополняет
- Append : дополняет введенное значение до строки из списка, но не предлагает варианты для выбора
- SuggestAppend : одновременно и предлагает варианты для автодополнения, и дополняет введенное пользователем значение
Перенос по словам
Чтобы текст в элементе TextBox переносился по словам, надо установить свойство WordWrap равным true . То есть если одно слово не умещается на строке, то но переносится на следующую. Данное свойство будет работать только для многострочных текстовых полей.
Ввод пароля
Также данный элемент имеет свойства, которые позволяют сделать из него поле для ввода пароля. Так, для этого надо использовать PasswordChar и UseSystemPasswordChar .
Свойство PasswordChar по умолчанию не имеет значение, если мы установим в качестве него какой-нибудь символ, то этот символ будут отображаться при вводе любых символов в текстовое поле.
Свойство UseSystemPasswordChar имеет похожее действие. Если мы установим его значение в true , то вместо введенных символов в текстовом поле будет отображаться знак пароля, принятый в системе, например, точка.
Событие TextChanged
Из всех событий элемента TextBox следует отметить событие TextChanged , которое срабатывает при изменении текста в элементе. Например, поместим на форму кроме текстового поля метку и сделаем так, чтобы при изменении текста в текстовом поле также менялся текст на метке:
public partial class Form1 : Form < public Form1() < InitializeComponent(); textBox1.TextChanged += textBox1_TextChanged; >private void textBox1_TextChanged(object sender, EventArgs e) < label1.Text = textBox1.Text; >>
char to string c#
Очень нужна помощь, пожалуйста. Есть текст в richtextbox, который превращаю в массив символов. Дальше нужно пройтись по всему массиву символов и проверить нет ли знаков (можно только буквы, если знак удалить, я пока добавляю в textbox), затем нужно добавить в datagrid слово, которое состоит из букв без иных знаков (в нижнем регистре). Проблема в том, что добавляется в datagrid в одну строку все слова и склеенные. Понимаю, что нужно разделить по пробелу, но так тоже не получается вывести нормально по одному слову в одну строку datagrid. Вот код:
. string word; string str; private DataGridViewRow row; public Form1() < InitializeComponent(); var col1 = new DataGridViewTextBoxColumn(); dataGridView1.Columns.AddRange(col1); >private void button1_Click(object sender, EventArgs e) < Word(); >public bool Oper(char v) < if (("№:;'+-/*@^<>~`()%$ =<>&. --#0123456789".IndexOf(v) != -1)) return true; return false; > public void Word() < char[] lines = richTextBox1.Text.ToCharArray(); foreach (var s in lines) < if (!Oper(s) && s != ' ') < word += s; >else < textBox1.Text = textBox1.Text + s; >> dataGridView1.Rows.Add(word.ToString().ToLower()); > >
Отслеживать
задан 21 сен 2019 в 17:54
15 4 4 бронзовых знака
21 сен 2019 в 18:46
Пробовала, не получается, сливается все в одну строку и добавляется в одну строку datagrid
21 сен 2019 в 19:00
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Я бы предложил работать через формирование списка токенов на основе изучаемого текста.
Создадим такой интерфейс
public interface IToken < //значение токена string Value < get; >//позиция первого символа токена в тексте int Position < get; >//название токена string TokenName < get; >//инфо для отображения string TokenValue < get; >>
Вот пример класса для токена Пробела
public class SpaceToken : IToken < public string Value < get; >public int Position < get; >public string TokenName < get; >public string TokenValue => $@"[:]"; public SpaceToken(int position) < Position = position; Value = " "; TokenName = "space"; >public override string ToString() < return TokenName; >>
А это для токена слова
public class WordToken : IToken < public string Value < get; >public int Position < get; >public string TokenName < get; >public string TokenValue => $"::>"; public int OrderNumber < get; >public WordToken(int position, string value, int orderNumber) < Position = position; Value = value.ToLower(); TokenName = "word"; OrderNumber = orderNumber; >public override string ToString() < return Value; >>
Тогда текст можно превратить в токены так
public List GetTokens(string text) < if (string.IsNullOrEmpty(text)) throw new ArgumentException(nameof(text)); //готовим результат Listtokens = new List(); //нумерация слов в тексте int wordsOrder = 0; //позиция первой буквы слова int wordPosition = 0; //для посимвольного набора слова List wordChars = new List(); var chars = text.ToCharArray(); for (int i = 0; i < chars.Length; i++) < //извлекаем текущий символ var current = chars[i]; if (Char.IsLetter(current)) < //если это первая буква слова if (wordChars.Count == 0) < wordPosition = i; >//вносим букву в массив слова wordChars.Add(current); //если это последний символ в тексте, т.е. текст заканчивается на слове //нужно добавить словный токен if (i + 1 == chars.Length) < AddWordToken(wordChars, wordPosition, tokens, ++wordsOrder); >> else < //т.е. текущий символ не относится к слову //и до этого у нас возможно собиралось слово //и его нужно закрывать и создавать словный токен if (wordChars.Count >0) < AddWordToken(wordChars, wordPosition, tokens, ++wordsOrder); //очищаем для следующего слова wordChars.Clear(); >//добавляем небуквенный токен AddNotLetterToken(tokens, i, current); > > return tokens; > private void AddWordToken(List wordChars, int position, List tokens, int wordsOrder) < var array = wordChars.ToArray(); var word = new String(array); tokens.Add(new WordToken(position, word, wordsOrder)); >private void AddNotLetterToken(List tokens, int i, char current) < if (Char.IsWhiteSpace(current)) < tokens.Add(new SpaceToken(i)); return; >if (Char.IsDigit(current)) < tokens.Add(new NumberToken(i, current.ToString())); return; >//если это не пробел и не цифра, значит это какой-то знак tokens.Add(new SignToken(i, current.ToString())); >
Ну, а далее уже будет достаточно просто работать с коллекцией токенов.
как удалить последний символ js
Для удаления последнего символа из строки можно воспользоваться методом slice() , передав ему первым аргументом 0 , а вторым — -1 . Метод вернёт новую строку, которая будет начинаться с начального (нулевого) символа, а заканчиваться на предпоследнем символе исходной строки.
const string = 'удалить последний символ%'; console.log(string.slice(0, -1)); // => удалить последний символ