如何过滤?(50分)

  • 主题发起人 主题发起人 studying
  • 开始时间 开始时间
S

studying

Unregistered / Unconfirmed
GUEST, unregistred user!
用ComboBox,当用户输入时,想做到只允许大写字母和下划线,
在ComboBox的 OnKeyUp 里这样写:
if not (key in ['A'..'Z','_']) then
ShowMessage('请使用大写字母和下划线.');
错误提示: Word 和 Char 不兼容.

我该怎么改? OnKeyUp里的 Key究竟该怎么用?
 
key是数字。大小写不区分。
例如:A和a的Key值都是65。所以你这里不能这样用。
 
那就是说,我的目的无法实现?
 
当然可以实现:
在OnKeyPress里面的Key就是Char类型。
if pos(Key,'ABCDEFG......_')=0 then
ShowMessage('请使用大写字母和下划线.');
省略号的内容就是你要求的字符内容。
 
在OnKeyPress里因该是:
IF Not (UpperCase(Key) In ['A'..'Z','_']) then
ShowMessage('请使用大写字母和下划线.');

 
是我没说清楚,确切的说,是只允许大写字母,数字,下划线,和汉字,
例如像:‘V_6出口’ 这样的。而 'v-6出口','V _6 出口(中间有空格)'都不对。
很麻烦,但必须这样,拜托各位了!


 
帮帮忙啊
 
我试过你的代码,没有错误。
我想错误可能在其他地方,你可以在这些代码前设置中断,
调试一下。看看错误在什么地方。
 
sorry:
我将代码写入的是onkeypress,所以没问题。
把这些代码写在onkeypress不是很好吗?
 
onkeyup中的key是word型的
你一定要在onkeyup中判断的话,可以写成
if not ((key>64) and (key<91)) then showmessage('dddddd');
可以判断按键是否a-z,但是不能判断是否大写。
要判断是否大写,这要判断是否按了shift键,判断caplock状态。
为了这一件小事,太麻烦了。

MessageDlg('The key value is ' + IntToStr(key), mtInformation, [mbOk], 0);
可以帮你得到key得值。
 
要判断是否为汉字,不能写在onkeypress or onkeyup中,
可以在onexit中写:
var i:integer;
flag:boolean;
begin
flag:=false;
for i:=1 to length(combobox1.text) do
if not (combobox1.Text In ['A'..'Z','_']) then
if ord(combobox1.text)<127 then flag:=true;
if flag then showmessage('请使用汉字、大写字母或下划线。');
end;
end;
 
to foenix:
你的程序很好用!多谢了!
可是能否请您说的详细些,为什么
if ord(combobox1.text)<127 then flag:=true;
能实现判断汉字? 见笑了.
 
studying:
汉字的编码首位(二进制)为1,即>=128
应该是:
if ord(combobox1.text)<128 then flag:=true;
可以判断不是汉字。
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部