如何让edit不能输入指定字符(50分)

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

sssing

Unregistered / Unconfirmed
GUEST, unregistred user!
让edit不能输入指定的字符,例如,指定edit不能输入"A",要怎么实现?
 
if pos('A',Edit.Text)>0 then
begin
ShowMessage('输入了限制字符,请重新输入');
Edit.Text:='';
end;

看看这样行不行。
 
可以,但是好像大小写是区分的哦,还有如果输入A,前面的字符都清空了!
有没有办法如果输入A,就只清空A,不清空其他的字符?
 
edit的ONKEYPRESS事件中写上
if Key= 'A' then
begin
Key := #0;
end;
 
chset=set of char;
procedure keycontrol(var rkey:char;rightset:chset);
begin
if rightset=[] then
exit;
if not (rkey=char(0))then
begin
if not (rkey in rightset) then
rkey:=char(0);
end;
end;
-------------------
procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
begin
keycontrol(key, ['0'..'9','x','X',#8,#13]);//#8为backspace #13 为回车,
end;
 
if Key= 'A' then
begin
Key := #0;
end;

这段代码可以,但是粘贴还是可以粘贴进A的
 
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Pos('A',Edit1.Text)>0 then
Edit1.Text:= StringReplace(Edit1.Text,'A','',[rfReplaceAll]);
Edit1.SelStart:= Length(Edit1.Text);
Edit1.SetFocus;
end
 
楼上方法加上我的方法就行了。
 
function replaceErrorChar(var str:string;RightSet:chset;Rch:char):integer;
{返回字符串str中不属于字符集合RightSet的数目,并将这些字符替换成Rch}
var
i,j:integer;
begin
j:=0;
if rightset<>[] then
for i:=1 to length(str)do
if not(str in Rightset) then
begin
inc(j);
str:=Rch;
end;
result:=j;
end;
---------------
procedure TForm1.Edit1Change(Sender: TObject);
begin
replaceErrorChar(Edit1.Text,['0'..'9'],'');
end
 
procedure TForm1.Edit1Change(Sender: TObject);
begin
//Edit1.Text有大写A或者小写a
if (Pos('A',Edit1.Text)>0) or (Pos('a',Edit1.Text)>0) then
//Edit1.Text有大写A替换为空
Edit1.Text:= StringReplace(Edit1.Text,'A','',[rfReplaceAll]);
//Edit1.Text有小写a替换为空
Edit1.Text:= StringReplace(Edit1.Text,'a','',[rfReplaceAll]);
//设定Edit1.Text插入点将被放在最后一个字符之后
Edit1.SelStart:= Length(Edit1.Text);
//Edit1.Text取得键盘焦点
Edit1.SetFocus;
end
 
后退
顶部