Расположите каре в MaskedTextbox

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

21
задан Community 23 May 2017 в 12:25
поделиться

4 ответа

Это должно добиться цели:

    private void maskedTextBox1_Enter(object sender, EventArgs e)
    {
        this.BeginInvoke((MethodInvoker)delegate()
        {
            maskedTextBox1.Select(0, 0);
        });         
    }
29
ответ дан Ahmad Mageed 29 November 2019 в 19:59
поделиться

Для улучшения рабочего решения Abbas попробуйте это:

private void ueTxtAny_Enter(object sender, EventArgs e)
{
    //This method will prevent the cursor from being positioned in the middle 
    //of a textbox when the user clicks in it.
    MaskedTextBox textBox = sender as MaskedTextBox;

    if (textBox != null)
    {
        this.BeginInvoke((MethodInvoker)delegate()
        {
            int pos = textBox.SelectionStart;

            if (pos > textBox.Text.Length)
                pos = textBox.Text.Length;

            textBox.Select(pos, 0);
        });
    }
}

Этот обработчик событий может быть снова использован с несколькими полями, и он не устраняет способность пользователя расположить курсор посреди вводимых данных (т.е. не вызывает курсор в, обнуляет положение, когда поле не пусто).

я нахожу, что это более тесно имитирует стандартное текстовое поле. Только остающийся незначительный сбой (что я вижу) - то, что после события 'Enter', пользователь все еще в состоянии выбрать остальную часть (пустой) подсказки маски, если ксенон удерживает мышь и перетаскивает до конца.

10
ответ дан Ishmaeel 29 November 2019 в 19:59
поделиться

Частичный ответ: можно расположить каре путем присвоения выбора с 0 длинами управлению в событии MouseClick, например:

MaskedTextBox1.Select(5, 0)

... установит каре в 5-й позиции символа в текстовом поле.

причина этот ответ только неравнодушен, то, потому что я не могу думать о вообще надежном способе определить положение, где каре должно быть расположенным на щелчок. Это может быть возможно для некоторых масок, но в некоторых общих падежах (например, американская маска номера телефона), я не могу действительно думать о простом способе разделить маску и быстрые символы от фактического ввода данных пользователем...

3
ответ дан mdb 29 November 2019 в 19:59
поделиться

Это большое улучшение по сравнению с поведением MaskedTextBoxes по умолчанию. Спасибо!

Я внес несколько изменений в отличное решение Измаила. Я предпочитаю вызывать BeginInvoke только в том случае, если курсор нужно переместить. Я также вызываю метод из различных обработчиков событий, так что входным параметром является активный MaskedTextBox.

private void    maskedTextBoxGPS_Click( object sender, EventArgs e )
{
    PositionCursorInMaskedTextBox( maskedTextBoxGPS );
}


private void    PositionCursorInMaskedTextBox( MaskedTextBox mtb )
{
  if (mtb == null)    return;

  int pos = mtb.SelectionStart;

  if (pos > mtb.Text.Length)
    this.BeginInvoke( (MethodInvoker)delegate()  { mtb.Select( mtb.Text.Length, 0 ); });
}
6
ответ дан 29 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

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