Saumyavemula Ответов: 4

Программирование на кнопке BACKSPACE


Привет,

Я программирую виртуальную клавиатуру, но не могу написать код на кнопке BACKSPACE. Я написал код на кнопке BACKSPACE, как показано ниже, но он не завершен, то есть удаляется из последнего символа. Как удалить символ посередине (в положении курсора)
If TextBox1.Text.Length > 0 Then
       d = TextBox1.Text.Length
       TextBox1.Text = TextBox1.Text.Remove(d - 1, 1)
End If



Заранее спасибо.

Sunasara Imdadhusen

Добавлено форматирование трески!!

Sunasara Imdadhusen

Хороший вопрос! мой голос-5.

4 Ответов

Рейтинг:
22

Prerak Patel

Вы также должны учитывать длину selectedtext, так как поведение backspace меняется.

If TextBox1.SelectedText.Length > 0 Then
      TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) & TextBox1.Text.Substring(TextBox1.SelectionStart + TextBox1.SelectionLength)
    Else
      TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart - 1) & TextBox1.Text.Substring(TextBox1.SelectionStart)
    End If


Sergey Alexandrovich Kryukov

Да, это исправление, мой 5-й, но это всего лишь симптоматическое лечение. Хотите увидеть радикальное решение? Пожалуйста, смотрите мой ответ.
--СА

Saumyavemula

Привет,

Спасибо, это действительно работает. Можете ли вы помочь мне для кодирования на кнопке CAPS Lock?


Заранее спасибо

Prerak Patel

Добро пожаловать.
На замок крышки, вы должны иметь флаг, или использовать user32.dll.
Я уже ответил на него http://www.codeproject.com/Questions/160142/programming-on-CAPS-LOCK-button.aspx

Saumyavemula

Я попытался использовать этот код, но он показывает ошибку как
"Не удается найти PInvoke DLL 'user32'"

Prerak Patel

Тебе это не нужно. Согласно вашей логике, вы просто должны иметь флаг. Обновленный ответ на предыдущий вопрос.

Рейтинг:
1

Sunasara Imdadhusen

Привет,
Пожалуйста, попробуйте следующее

If TextBox1.Text.Length > 0 Then
    int CursorPosition = textBox1.SelectionStart;
    TextBox1.Text = TextBox1.Text.Remove(CursorPosition - 1, 1)
End If


Спасибо,
Имдадхусен


Sergey Alexandrovich Kryukov

Да, это исправление, мой 5-й, но это всего лишь симптоматическое лечение. Хотите увидеть радикальное решение? Пожалуйста, смотрите мой ответ.
--СА

Рейтинг:
1

Sergey Alexandrovich Kryukov

Я думаю, что то, что вы пишете, вовсе не виртуальная клавиатура.

Если вы предполагаете, что целевой сфокусированный элемент является TextBox, это означает, что вы пишете некоторый элемент управления, чтобы помочь печатать только для вашего приложения. Мой совет таков: Либо переименуйте свой компонент, либо реализуйте настоящую виртуальную клавиатуру.

Для этого вам нужно просто сделать вещи:

1) Используйте P/Invoke для Windows API SendInput.

2) решите проблему фокусировки клавиатуры и предотвращения как скрытия, так и активации вашей виртуальной клавиатуры, см. Это: Фокус приложения получение и потеря[^].

Если вы сделаете эту реальную вещь, она будет имитировать обычный пользовательский ввод, и ваша проблема backspace будет решена просто имитацией нажатия клавиши backspace. Имейте в виду, что backspace-это не единственный метод, поэтому лучше использовать настоящую технику вместо нее. TextBox манипуляции.

—СА


Saumyavemula

Привет,

Это в C#, мне нужно в VB.Net-да. Не могли бы вы мне помочь?


Заранее спасибо.

Sergey Alexandrovich Kryukov

В своем ответе я не написал ни слова на языке Си#. Если вы о ссылке, то это просто для справки. Кроме того, в нем нет ничего специфичного для C#.

(И вообще, если вы задаете вопросы или просто ищете помощь в .NET, не надейтесь на много VB.NET насколько я могу судить, большинство квалифицированных людей работают на C#. Это просто факт жизни: непонимание C# будет для вас проблемой. И нет ничего плохого в том, чтобы немного научиться.)

--СА

Рейтинг:
0

Member 11065918

Dim d как целое число

If TextBox1.Text.Length > 0 Then
       d = TextBox1.Text.Length
       TextBox1.Text = TextBox1.Text.Remove(d - 1, 1)
End If