Я хочу изменить содержимое label с клавиатуры, причем иных компонентов у меня нет, исключительно один label1 . Вот что я имею:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (cancoding == true)
{
if (e.KeyCode == Keys.Back)
if (label1.Text != "")
label1.Text = label1.Text.Substring(0, label1.Text.Length - 1);
else
return;
else
label1.Text += ((char)e.KeyCode).ToString();
}
}
Сия код отлавливает все клавиши, но если я захочу ввести с клавиатуры к примеру : или захочу написать любой русский текст или просто нажать на кнопки shift,alt,CAPSLOCK он выводит непонятную дичь, не являющаяся читабельным текстом. Очень прошу помочь
Написание редактора текста с нуля, на самом деле, непростая задача. И проблема, упомянутая в вопросе, не единственная которая возникнет. Первое что приходит на ум (но это актуально лишь для стран вроде Японии или Китая) - поддержка ввода через IME. Из актуальных проблем, поддержка выделения, копирования, вставки и замены.
Поэтому я рекомендую для редактирования текста временно создавать TextBox и помещать его точно над Label. После нажатия определенной комбинации клавиш (допустим Enter или CTRL+ENTER), копировать текст из TextBox в Label и уничтожать TextBox.
Если все же использовать подход описанный в вопросе, то можно воспользоваться решением данным на аналогичный вопрос на англоязычном Stack Overflow: Convert keycode to char/string. Я имею ввиду непринятый автором вопроса ответ, набравший наибольшее количество голосов.
В ответе предлагается использовать функцию Win API ToUnicode. Для этого, ее необходимо импортировать:
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int ToUnicode(
uint virtualKeyCode,
uint scanCode,
byte[] keyboardState,
StringBuilder receivingBuffer,
int bufferSize,
uint flags
);
Автором приводится так же пример использования этой функции, который учитывает смену регистра нажатием Shift (но не учитывает Caps Lock).
static string GetCharsFromKeys(Keys keys, bool shift)
{
var buf = new StringBuilder(256);
var keyboardState = new byte[256];
if (shift)
{
keyboardState[(int)Keys.ShiftKey] = 0xff;
}
ToUnicode((uint)keys, 0, keyboardState, buf, 256, 0);
return buf.ToString();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Получаю процессы так:
Добрый день, подскажите как можно задать кол-во элементов массива из TextBox?
Поле Customer допускает значение nullПри попытке его устновить в null, оно остается прежним
Источник : Энтропия файла Покажите пожалуйста видео Youtube