【问题标题】:c# - limit certain characters inside textboxc# - 限制文本框中的某些字符
【发布时间】:2016-05-11 00:30:57
【问题描述】:

我正在尝试限制文本框中某个字符(在我的情况下为逗号 (,))的数量。我希望它在文本框中只允许最多 9 个逗号。如果用户尝试添加超过 9 个逗号,它应该显示一个带有错误的消息框,然后也不允许用户在文本框中输入更多内容。

在我的应用程序中,我允许用户将 10 个标签添加到以逗号分隔的文本框。

用户输入的示例如下所示:summer,sexy,hot,beautiful,girls,guys,food,music,funny,lol

这是文本框中允许的标签的最大限制(9 个逗号)。 当他们达到这个限制时,它应该阻止他们输入更多的逗号。我希望我已经足够清楚了。

到目前为止,这是我的代码。我的文本框叫做 tagBox。

private void tagBox_TextChanged(object sender, EventArgs e)
        {
            // Allow max 10 tags in the tag box
            string tags = tagBox.Text;
            int count = tags.Split(',').Length - 1;
            if (count > 9)
            {
                MessageBox.Show("Max 10 tags are allowed.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

我只是设法让消息框出现。但是如何阻止他们输入更多的逗号?

【问题讨论】:

  • 使用 KeyPress 事件或 KeyUp 事件而不是 TextChanged 事件。然后在 KeyPress/KeyUp 事件中,如果当前逗号计数已经是 9 并且当前按下的字符是逗号,您可以取消该逗号字符将被禁止的事件。
  • 如果您创建一个继承自 Textbox 的自定义控件,您可以覆盖 keypressed 处理程序,如果超出限制则忽略它们
  • 好的,我将其改为 KeyPress。但是如何取消/忽略密钥? (我仍然希望用户能够按 DELETE 来删除/编辑当前的 10 个标签)。我只是不想让他们在第 9 个逗号后添加更多内容。
  • 在 keyPress 事件中,您可以检测从那里按下的字符是什么,您可以设置 e.Handled = false;所以它会被禁止。
  • 所以和我上面的代码一样,但是在消息框之前我只输入 e.Handled = false; ? (在 KeyPress 而不是 TextChanged 上)

标签: c# winforms text count character


【解决方案1】:

它应该看起来像这样:

private void tagBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    // Allow max 10 tags in the tag box
    string tags = tagBox.Text;
    int count = tags.Split(',').Length - 1;
    if (count > 9 && e.KeyChar == ',')
    {
        e.Handled = true;
        MessageBox.Show("Max 10 tags are allowed.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
    else        
        e.Handled = false;
}

【讨论】:

  • 没用。首先,我将其更改为 count==9 而不是 count > 9,因为它允许您的代码使用 10 个逗号。 (应该最多 10 个标签,最多 9 个逗号)。然后消息框出现在正确的位置。但是在消息框中单击“确定”后,我仍然可以输入更多标签,并且消息框不断弹出。所以这几乎是解决方案,但仍然无法正常工作:/
  • 我看到你把它改成了 e.Handled = true;在底部。在我这样做之后,它根本不允许我写任何东西
  • 您可以禁用文本框,但您应该再次启用一个按钮。
  • 我不喜欢这样,如果他们想快速编辑标签或删除标签等,那将不是很友好......
  • 我已经刷新了答案,你可以在我设置一个类似的代码时再试一次吗?
【解决方案2】:

我认为你应该这样做

    Public class TagTextBox : TextBox
    {
        Public override OnKeyDown(object sender, KeyEventArgs args)
        {
            // Do logic here
            // Call this to accept Key
            base.OnKeyDown(sender, args);
         }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多