我正在创建一个数字文本框,我希望像Excel一样将小键盘的小数点字符映射到CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

有没有一种方法可以在TextBox解释之前修改(替代)密钥?

我目前的策略是:

protected override void OnKeyDown(KeyEventArgs e)
{
    if (e.KeyCode == Keys.Decimal)
    {
        e.Handled = true;
        e.SuppressKeyPress = true;

        int selectionStart = SelectionStart;

        Text = String.Concat(
            Text.Substring(0, selectionStart),
            CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator,
            Text.Substring(SelectionStart + SelectionLength)
        );

        Select(selectionStart + 1, 0);
    }
    else
    {
        base.OnKeyDown(e);
    }
}

最佳答案

您可以将SelectedText-property设置为分隔符,而不是替换整个Text-property:

if (e.KeyCode == Keys.Decimal)
{
    e.Handled = true;
    e.SuppressKeyPress = true;
    SelectedText = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator;
}
else base.OnKeyDown(e);

关于c# - 在到达文本框之前修改字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4484208/

10-12 07:39