You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WinForms的KeyPress事件中仅允许字母和单个ASCII码45的减号输入?

关于用ASCII码限制文本框输入字母和单个减号的方案

当然可行!用减号的ASCII码(45)来实现输入限制完全没问题,不过咱们得额外加个逻辑来确保只允许输入一个减号——毕竟原代码只处理了字母和退格键,没考虑减号的数量限制。

修改后的代码实现

private void txtcity_KeyPress(object sender, KeyPressEventArgs e)
{
    // 把sender转换为TextBox控件,方便后续检查文本内容
    TextBox targetTextBox = sender as TextBox;

    // 定义允许输入的三种情况:
    // 1. 输入的是字母(大小写均支持)
    // 2. 输入的是退格键(用于删除内容)
    // 3. 输入的是ASCII码为45的减号,且当前文本框中还没有减号
    bool isInputAllowed = char.IsLetter(e.KeyChar)
                          || e.KeyChar == (char)Keys.Back
                          || (e.KeyChar == (char)45 && targetTextBox != null && !targetTextBox.Text.Contains("-"));

    // 如果输入不被允许,就标记Handled为true,阻止字符输入到文本框
    e.Handled = !isInputAllowed;
}

代码细节说明

  • 直接使用(char)45对应减号的ASCII码,完全贴合你想用ASCII码实现限制的需求,和直接写'-'功能一致,但更符合你的要求
  • 增加了targetTextBox.Text.Contains("-")的判断,确保文本框内最多只能存在一个减号,避免用户重复输入
  • 加入targetTextBox != null的空引用检查,虽然sender大概率是TextBox,但严谨性可以避免潜在的运行时异常

额外补充

如果需要防范用户通过粘贴操作输入多个减号,仅靠KeyPress事件是不够的,这种情况下可以额外监听TextChanged事件,在内容变化后检查并移除多余的减号。不过如果你的场景只需要限制键盘输入,上面的代码就完全够用啦。

内容的提问来源于stack exchange,提问作者s3cr3t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 07:57:34