gpt4 book ai didi

c# - 在字符到达 TextBox 之前修改字符

转载 作者:行者123 更新时间:2023-11-30 22:42:18 24 4
gpt4 key购买 nike

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

有没有办法在 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);
}
}

最佳答案

是的,您可以通过覆盖 WndProc() 来捕获 WM_CHAR 消息:

using System;
using System.Windows.Forms;

class MyTextBox : TextBox {
protected override void WndProc(ref Message m) {
if (m.Msg == 0x102 && m.WParam.ToInt32() == '.') {
m.WParam = (IntPtr)'/'; // test only
}
base.WndProc(ref m);
}
}

请注意,剪贴板 (Ctrl+V) 也有问题。那是消息 WM_PASTE,0x302。一个可能的解决方法是:

    if (m.Msg == 0x302 && Clipboard.ContainsText()) {
var txt = Clipboard.GetText();
txt = txt.Replace('.', '/');
this.SelectedText = txt;
return;
}

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com