让我非常清楚 - 我没有在这里寻找静态字符限制(Textbox.MaxLength只是没有删除它。)
我正在创建一个简单的消息传递程序,我想实现一个字符限制。消息显示在列表框中,不能水平滚动/包装。解决方案:对每条消息施加限制,以便用户不会意外地切断自己的消息。
问题是10个小字符比10个全角字符小很多。 - E.G.我和W:
IIIIIIIIII
WWWWWWWWWW
我想找到一种方法,通过字符串宽的实际像素数量来限制输入到文本框中的字符。 这样:
作为参考,我使用Verdana 8.25pt作为列表框。
任何建议将不胜感激, 感谢。
答案 0 :(得分:0)
这应该可以帮到你。我故意选择了keyUp事件,因为用户会看到输入的字母并且它会消失。
gtrack
基本上发生的事情是文本使用文本框的字体进行渲染(不显示)并进行测量。如果渲染文本的宽度大于文本框的客户区域,则在键入的位置删除该字母。这可以在文本框中的任何位置。
如果光标在删除字母时位于文本末尾,.net会自动将光标位置设置为开头,即删除字母。因此,该子检查初始光标位置是否是比新文本框内容的长度更大的索引。如果是,则将光标再次设置为结尾。否则它将被移回1,因为删除了一个字符。