【发布时间】: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