Простой и эффективный однострочный:
function isMobile() { return ('ontouchstart' in document.documentElement); }
Однако приведенный выше код не учитывает случай для ноутбуков с сенсорным экраном. Таким образом, я предоставляю эту вторую версию, основанную на решении @Julian :
function isMobile() {
try{ document.createEvent("TouchEvent"); return true; }
catch(e){ return false; }
}
Установите для свойства CharacterCasing
текстового поля TextBox
значение Верхнее
; тогда вам не нужно обрабатывать его вручную.
Обратите внимание, что textBox3.Text + = e.KeyChar.ToString (). ToUpper ();
добавит новый символ в конец строки , даже если курсор ввода находится в середине строки (что для большинства пользователей будет очень запутанным). По той же причине мы не можем предположить, что курсор ввода должен появиться в конце строки после ввода символа.
Если вы все же действительно хотите сделать это в коде, должно сработать что-то вроде этого:
// needed for backspace and such to work
if (char.IsControl(e.KeyChar))
{
return;
}
int selStart = textBox3.SelectionStart;
string before = textBox3.Text.Substring(0, selStart);
string after = textBox3.Text.Substring(before.Length);
textBox3.Text = string.Concat(before, e.KeyChar.ToString().ToUpper(), after);
textBox3.SelectionStart = before.Length + 1;
e.Handled = true;
Если вам нужно сделать это вручную, вы можете использовать
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
textBox3.Text += e.KeyChar.ToString().ToUpper();
textBox3.SelectionStart = textBox3.Text.Length;
e.Handled = true;
}
. Но предыдущий код вставляет новый символ в конец текста. Если вы хотите вставить его туда, где находится курсор:
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
int selStart = textBox3.SelectionStart;
textBox3.Text = textBox3.Text.Insert(selStart,e.KeyChar.ToString().ToUpper());
textBox3.SelectionStart = selStart + 1;
e.Handled = true;
}
Этот код вставляет новый символ в позицию курсора и перемещает курсор влево от вновь вставленного символа.
Но я все же думаю, что установка CharacterCasing лучше.
Это сохранит местоположение точки вставки (но я бы предпочел ответ, данный Фредриком Мёрком).
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
int selStart = textBox3.SelectionStart;
textBox3.Text += e.KeyChar.ToString().ToUpper();
textBox3.SelectionStart = selStart;
e.Handled = true;
}
SelectionStart может на самом деле называться SelStart, у меня пока нет под рукой компилятора.
Другой способ - просто изменить значение самого KeyChar:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
if ((int)e.KeyChar >= 97 && (int)e.KeyChar <= 122) {
e.KeyChar = (char)((int)e.KeyChar & 0xDF);
}
}
Хотя использование свойства CharacterCasing является самым простым решением.
tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length;
tbNumber.SelectionLength = 0;