【问题标题】:C# Removing last two characters from textboxC#从文本框中删除最后两个字符
【发布时间】:2016-09-18 18:21:52
【问题描述】:

我有一个文本框,我正在尝试为电话号码实现自动格式设置。

如果用户按下删除键并且文本框中字符串的最后一个字符是'-',我想删除文本框的最后两个字符。

我试图通过删除子字符串来做到这一点,但没有运气。谢谢

private void phoneNumberTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Back)
            {
                if (phoneNumberTextBox.Text.Length != 0)
                {
                    if (Convert.ToChar(phoneNumberTextBox.Text.Substring(phoneNumberTextBox.Text.Length - 1)) == '-')
                    {
                        phoneNumberTextBox.Text.Substring(0, phoneNumberTextBox.Text.Length - 2);
                    }
                }
            }     

【问题讨论】:

标签: c# textbox autoformatting


【解决方案1】:

Substring() 返回一个新的字符串实例并保持当前实例不变。因此,您的调用只会创建一个新的临时字符串,但由于您不对其进行任何操作,它会立即被丢弃。

要使更改生效,您需要将Substring() 的结果分配回文本框,如下所示:

phoneNumberTextBox.Text = phoneNumberTextBox.Text.Substring(0,
    phoneNumberTextBox.Text.Length - 2);

请务必先检查字符串的长度,以避免处理短字符串(少于 2 个字符)时出现问题。

另外,如果您想限制文本框中的字符数,只需使用MaxLength 属性即可。您不必以这种方式处理长度和打字。

【讨论】:

  • 这就像一个魅力!谢谢。现在我遇到了一个问题,当操作完成时,文本光标会移动到文本框的开头。
  • @AlexEdwards 发生这种情况是因为您缩短了字符串 - 插入符号将位于无效位置,因此它移动到字符串的开头。为什么不直接设置文本框的MaxLength 属性?
  • @AlexEdwards 我添加了一个指向MaxLength 的链接——它可能对你更有效。
  • 我已经为数字 xxx-xxx-xxxx 的一般格式设置了 MaxLength。有什么办法可以让插入符号移到字符串的末尾?
  • @AlexEdwards 您可以使用 SelectionStart 属性 - 只需将其移动到文本末尾即可。
【解决方案2】:

对于 2 char 删除可以这样做:

phoneNumberTextBox.Text = phoneNumberTextBox.Text.Remove(phoneNumberTextBox.Text.Length - 2, 2);

对于按键部分可能是您必须在表单上启用 KeyPreview。

Wow sry 编辑出错了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 2013-06-05
    • 1970-01-01
    • 2019-10-25
    • 2011-01-19
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多