Vb.Net:限制输入文本框的字符总宽度?

时间:2017-09-14 02:38:25

标签: vb.net

让我非常清楚 - 我没有在这里寻找静态字符限制(Textbox.MaxLength只是没有删除它。)

我正在创建一个简单的消息传递程序,我想实现一个字符限制。消息显示在列表框中,不能水平滚动/包装。解决方案:对每条消息施加限制,以便用户不会意外地切断自己的消息。

问题是10个小字符比10个全角字符小很多。 - E.G.我和W:

  • IIIIIIIIII

  • WWWWWWWWWW

我想找到一种方法,通过字符串宽的实际像素数量来限制输入到文本框中的字符。 这样:

  • 没有人可以使用所有首都并被切断,
  • 没有人可以正常输入并且比必要时更早地被字符限制停止。

作为参考,我使用Verdana 8.25pt作为列表框。

任何建议将不胜感激, 感谢。

1 个答案:

答案 0 :(得分:0)

这应该可以帮到你。我故意选择了keyUp事件,因为用户会看到输入的字母并且它会消失。

gtrack

基本上发生的事情是文本使用文本框的字体进行渲染(不显示)并进行测量。如果渲染文本的宽度大于文本框的客户区域,则在键入的位置删除该字母。这可以在文本框中的任何位置。

如果光标在删除字母时位于文本末尾,.net会自动将光标位置设置为开头,即删除字母。因此,该子检查初始光标位置是否是比新文本框内容的长度更大的索引。如果是,则将光标再次设置为结尾。否则它将被移回1,因为删除了一个字符。