【问题标题】:Replace pressed key in TextBox to another C#将 TextBox 中的按键替换为另一个 C#
【发布时间】:2016-09-01 10:49:24
【问题描述】:

如何将按下的“小数点”键从小键盘替换为始终返回“。”独立于区域设置。我希望它只适用于一个(特定的)TextBox,而不是全部在应用程序中。
是否可以在不创建自己的控件的情况下完成此操作?

【问题讨论】:

  • 你有没有尝试过?一个选项是将KeyPressed 事件添加到textbox,您可以在其中检查按下的键,如果是小数点,则执行添加“.”的操作。字符到文本框而不是','。
  • 区域设置是什么意思?
  • @BojanB 我试过 KeyDown、KeyUp、KeyPressed。对于 KeyDown、KeyUp,您无法更改字符。在 KeyPressed 中,您无法确定字符 ',' 来自 numpad 或 alfakeys
  • @user6002727 在 Windows 的区域设置中,您可以将小数点字符更改为点或分号,小键盘中的点键将返回该字符。
  • 反对什么问题?

标签: c# wpf winforms


【解决方案1】:

为了做到这一点,您只需要处理KeyDown 事件,如果激活的键是小键盘十进制,则抑制它,然后只需发送您想要的新键。

这很简单,下面的链接应该给你足够的指针来实际编写一些代码:

一旦你写了一些东西,你可以就你可能遇到的任何具体困难提出一个新问题。

【讨论】:

    【解决方案2】:

    这是一种可能的解决方案(很可能不是最好的解决方案,但应该可行),如果按下数字键盘上的十进制键,如果 , 键是按下它仍然会将, 字符添加到文本框中。

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyCode == Keys.Decimal)
      {
        e.SuppressKeyPress = true; 
        textBox1.Text += ".";
        textBox1.SelectionStart = textBox1.Text.Length;
        textBox1.SelectionLength = 0;
      }
    }
    

    SuppressKeyPress 防止按下的键被发送到文本框。然后将所需的字符添加到文本框中。 SelectionStartSelectionLength 属性设置为将光标移动到文本框中字符串的末尾。

    希望有帮助

    编辑

    正如 cdkMoose 所指出的那样,这种方法的缺陷是.character 总是添加到字符串的末尾,如果需要在字符串中的任何位置添加.character字符串代码可以这样使用:

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyCode == Keys.Decimal)
      {
        e.SuppressKeyPress = true;
        var caretPosition = textBox1.SelectionStart;  
        textBox1.Text.Insert(caretPosition , ".");
        textBox1.SelectionStart = caretPosition  + 1;
        textBox1.SelectionLength = 0;
      }
    }
    

    【讨论】:

    • 当插入符号位置不在文本末尾时不起作用。我相信期望的结果是强制使用小数,无论文本框中的位置如何
    • @cdkMoose 感谢您指出这一点,尽管没有,我修改了答案,现在也应该涵盖这种情况
    • 更改为textBox1.Text = textBox1.Text.Insert(caretPosition, ".");
    【解决方案3】:

    this

    您可以处理KeyDown 事件,如果是,则在小键盘上取消事件并使用'.'发送新的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多