固定格式文本框在Windows控制面板中的网络配置和系统时间设置中有出现过。但是MFC、JavaFX、SWT、HTML中都没有这种控件。假设这是一个系统控件,为什么又不让应用层使用呢?显然假设不合理,那么也就是说这种固定格式文本框并不是一个系统API提供的功能。
固定格式文本框的本质是一个不可编辑的可见文本框和若干个透明背景的小文本框。
文本框的背景颜色可以设置成透明,再把透明背景的文本框放到一个普通背景的但不可编辑的大文本框上,看起来就好像直接操作的是那个大文本框一样。当小文本框中输入了某个分隔符或字数达到上限时,删除文本框中的这个分隔符,再把焦点转移到下一个小文本框。
对于AutoCAD的连续激活码文本框阵列,其实是第一个文本框文本达到上限时,截断后面的文本放到第二个文本框。这时第二个文本框检测到字数变化,调用同一个回调函数,再截断一部分填入第三个文本框。看起来就好像一次复制就把整个激活码截断成4个字符一组的矩阵了。与系统时间和IP的文本框的区别就是AutoCAD没有那个大文本框,而是直接把小文本框设置成可见背景。在Windows XP的激活窗口也有这个设置,但激活码的长度要小得多。
该方法适用于MFC、JavaFX、SWT、Swing,对HTML应该也适用,但是会麻烦一点。