edit 输入问题,快!!!(100分)

  • 主题发起人 主题发起人 wanfangme
  • 开始时间 开始时间
W

wanfangme

Unregistered / Unconfirmed
GUEST, unregistred user!
edit 控件,输入人名(英文)
如 Liu Hongmin(对),Liu Hong Min(错)
如何写程序控制输入,自动究错.
 
你可以在Edit控件的OnExit事件程序中检查用用户输入是否合法,
如不合法就试图纠正,否则提示.
 
你的条件好象有点难实现,如果输入的是纯粹的外文人名,该人有自己的姓、名和父名,你
如何判断?如果只允许名字中存在一个非字母的字符用楼上的办法是最直接的。
 
我想你的要求就是输入的东东只有一个空格(或其它分隔符)将姓和名分开,这样的话:
响应它的OnKeyPress事件,设定一个标志位,判断是否输入了空格就行了。
如下:
Const
SPIC=' ';//设定分隔符为空格

var
InputSpc:Boolean;
...

TForm1.OnCreate
begin
...
InputSpc:=false;//初始化
...
end;
...
TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
s:String;
begin
s:=Trim(Edit1.Text);//将Edit1.Text的头尾两个空格除去。除去头尾两端空格的影响。
if s='' then InputSpc:=false;//没有输入内容。
if Key=SPIC then//如果输入了空格
if not InputSpc then
begin //没有输入过空格
if s<>'' then InputSpc:=true else InputSpc:=false;
end
else
begin
//显示出错信息。
Beep;
Key:=#0;
end;
end;
end;
最好再在OnExit中判断一下。
 
人名的格式要求如何。把你的要求写清楚点。我帮你写段代码
 
姓 和 名 的首字母要求自动大写.不能输入中文.
 
你可以编个小程序,如:
在EDIT退出的事件中,把内容先一个一个字符读出,放入一个变量中,做个字符循环
,把第一个字变为大写,遇到第一个空格,做个标记,把名的字变为大写,以后的字符
读到这个变量中,如遇空格,不放入变量中。
最后把变量值还给EDIT
 
写好了,看看合用吗?

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['A'..'Z','a'..'z',#32,#8,#13]) then Key:=#0
else if Trim(Edit1.Text)='' then key:=UpCase(key) //如果空就大写
else if (Pos(' ',Edit1.Text)>0) and (key=#32) then key:=#0 //是否已有空格
else if Pos(' ',Edit1.Text)=Length(Edit1.Text) then key:=UpCase(Key) //空格后一个字符
else if (key in ['A'..'Z']) then key:=chr(ord(key)+32); //大写
end;
 
还是用maskedit吧
 
不让在字符串中间输入间隔的两个以上的空格不就行了
 
不会吧,英文名中间也有middle name的 :)
 
接受了,谢谢.
 
后退
顶部