覆盖TextBox中的字符

时间:2014-02-25 18:30:05

标签: c# wpf

当我输入此文本框时,我需要默认行为是覆盖,而不是插入。 我不知道我是否清楚自己。

例如:我有一个MaxLenght = 4的文本框。当它获得焦点时,它需要覆盖从第一个到最后一个的字符。

我可以使用“插入”按钮执行此操作。但我需要一个自动解决方案。

2 个答案:

答案 0 :(得分:1)

您可以通过在 _OvertypeMode 属性上将 True 设置为 TextEditor 来使用反射TextBox。

假设您在XAML中有TextBox声明:

<TextBox x:Name="textBox"/>

在后面的代码中,你可以这样做:

PropertyInfo textEditorProperty = typeof(TextBox).GetProperty(
                  "TextEditor", BindingFlags.NonPublic | BindingFlags.Instance);

object textEditor = textEditorProperty.GetValue(textBox, null);

// set _OvertypeMode on the TextEditor
PropertyInfo overtypeModeProperty = textEditor.GetType().GetProperty(
               "_OvertypeMode", BindingFlags.NonPublic | BindingFlags.Instance);

overtypeModeProperty.SetValue(textEditor, true, null);

来源 - MSDN link

答案 1 :(得分:1)

您可以尝试处理按键事件,例如:

private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
    int myCaretIndex = MyTextBox.CaretIndex;
    char[] characters = MyTextBox.Text.ToCharArray();

    if (myCaretIndex < characters.Length)
    {
        characters[myCaretIndex] = char.Parse(e.Key.ToString());

        MyTextBox.Text = string.Join("", characters);

        MyTextBox.CaretIndex = myCaretIndex + 1;

        e.Handled = true;
    }
}