如何获取文本框中输入的索引

How to get the index of the input in a textbox

我正在尝试使用按键方法将某种格式强制输入文本框

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
}

但是当我有一个完整的日期并且我想更改任何数字时我不能强制使用字符因为我使用的是文本计数所以有什么方法可以使用文本框的光标位置而不是文本计数

TextBox.SelectionStart 将为您提供插入符号的位置。

If no text is selected in the control, this property indicates the insertion point, or caret, for new text

就是说,您知道已经有一个用于从用户捕获日期的控件吗?它称为 DateTimePicker. It has a Format 属性,可用于控制日期如何显示给用户。

如果您使用的是 WPF,快速查看 TextBox 上的属性会发现它有一个 TextBox.CaretIndex 可以让您找到插入符号的位置。

从用户那里获取日期的控件是DatePicker