Как получить индекс ввода в текстовом поле - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь ввести определенный формат в текстовое поле с помощью метода нажатия клавиш

private void textbox_KeyPress(object sender, KeyPressEventArgs e){
    switch (((TextBox)sender).Name){
        case "txtTitle":
            //code
            break;
        case "txtDate":
            if(txtDate.Text.Count() > 9) e.Handled = true;
            else{
                switch (txtDate.Text.Count()){
                    case 0: //0,1,2,3 (day)
                        e.Handled = (e.KeyChar > 47 && e.KeyChar < 52)?false:true; 
                        break;
                    case 1: //if last was 0,1,2 accept 0-9 (day)
                        if (txtDate.Text.Last() > 47 && txtDate.Text.Last() < 51) e.Handled = (e.KeyChar > 47 && e.KeyChar < 58)?false:true;
                        //if last was 3 accept 0,1
                        else if (txtDate.Text.Last() == 51) e.Handled = (e.KeyChar == 48 || e.KeyChar == 49)?false:true;
                        break;
                    case 2: case 5: // '/'
                        if (e.KeyChar != 47) e.Handled = true;
                        break;
                    case 3: //0,1 (month)
                        e.Handled = (e.KeyChar == 48 || e.KeyChar == 49)?false:true;
                        break;
                    case 4: //if last was 0 accept 0-9 (month)
                        if(txtDate.Text.Last() == 48) e.Handled = (e.KeyChar > 47 && e.KeyChar < 58)?false:true;
                        //if last was 0 accept 0-9
                        else e.Handled = (e.KeyChar > 47 && e.KeyChar < 51)?false:true;
                        break;
                    case 6: case 7: case 8: case 9: //0-9 (year)
                        e.Handled = (e.KeyChar > 47 && e.KeyChar < 58)?false:true;
                        break;
                }
            }
            break;
        case "txtBegin": case "txtEnd":
            //code
            break;
    }
    if (e.KeyChar == 8) e.Handled = false; //backspace
}

, но когда у меня есть полная дата, и я хочу изменить любые числа, я не могу сообщить символы, потому что я с использованием счетчика текста, так есть ли способ использовать положение курсора текстового поля вместо счетчика текста

1 Ответ

2 голосов
/ 11 февраля 2020

TextBox.SelectionStart даст вам местоположение каретки.

Если в элементе управления не выбран текст, это свойство указывает точку вставки или каретку для новый текст

Тем не менее, вы знаете, что уже есть элемент управления для сбора данных от пользователя? Это называется DateTimePicker. У него есть свойство Format, которое можно использовать для управления отображением даты пользователю.

Если вы используете WPF, быстро просмотрите свойства TextBox показывает, что у него есть TextBox.CaretIndex, чтобы определить местоположение каретки.

И элемент управления для получения даты от пользователя DatePicker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...