Как переместить каре текстового поля направо

Простой и эффективный однострочный:

function isMobile() { return ('ontouchstart' in document.documentElement); }

Однако приведенный выше код не учитывает случай для ноутбуков с сенсорным экраном. Таким образом, я предоставляю эту вторую версию, основанную на решении @Julian :

function isMobile() {
  try{ document.createEvent("TouchEvent"); return true; }
  catch(e){ return false; }
}

8
задан Uwe Keim 21 February 2014 в 05:04
поделиться

5 ответов

Установите для свойства 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;
18
ответ дан 5 December 2019 в 05:08
поделиться

Если вам нужно сделать это вручную, вы можете использовать

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 лучше.

1
ответ дан 5 December 2019 в 05:08
поделиться

Это сохранит местоположение точки вставки (но я бы предпочел ответ, данный Фредриком Мёрком).

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, у меня пока нет под рукой компилятора.

1
ответ дан 5 December 2019 в 05:08
поделиться

Другой способ - просто изменить значение самого 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 является самым простым решением.

0
ответ дан 5 December 2019 в 05:08
поделиться
            tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length;
            tbNumber.SelectionLength = 0;
12
ответ дан 5 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: