我都想破头2天了!(100分)

  • 主题发起人 主题发起人 ilovedelphi4
  • 开始时间 开始时间
I

ilovedelphi4

Unregistered / Unconfirmed
GUEST, unregistred user!
FORM上有10个EDIT,都可以让用户自己填写EDIT的TEXT内容,当然,
用户可以有选择,就是说有些EDIT可以不填而让它空着,有可能用
户就填写了一个EDIT,也有可能用户填写了9个EDIT,现在我要做的
事情是:
如何在程序中知道用户究竟填写了那些EDIT(TEXT不为空),
没有填写那些EDIT(TEXT为空),
这段程序应该怎么样写?我都想破头2天了!
 
一个一个的判断不可以呢?
还是想做个批处理?不如作个标志位(数组什么的)
填写了就置1,一样可以搞定
是不是太滥了?呵呵,希望有帮助
 
用数组,或动态生成edit
 
方法一,循环检查:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
c:TComponent;
e:TEdit;
begin
for i:=0 to Self.ComponentCount-1 do
begin
c:=Self.Components;
if c is TEdit then
begin
e:=TEdit(c);
Memo1.Lines.Add('Component No.'+IntToStr(i)+
' TagNo='+IntToStr(e.Tag)+' Text='+e.Text);
end;
end;
end;
方法二,应用事件:
把所有的Edit的OnChange事件都指向下面方法
procedure TForm1.Edit1Change(Sender: TObject);
var
e:TEdit;
begin
if NOT (Sender is TEdit) then exit;
e:=TEdit(Sender);
Memo1.Lines.Add('Component No.'+IntToStr(e.ComponentIndex)+
' TagNo='+IntToStr(e.Tag)+' Text''s Changed to'+e.Text);
end;

 
同意JJams_King
 
上面这段程序只是判断EDIT的填写内容,而我需要的结果是:
我需要知道究竟是哪个EDIT没有填写!比如用户没有填写EDIT3,
那么我需要在程序中知道EDIT3的TEXT为空。
 
可以采用类似如下代码试一试:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
edittext :array[1..10] of TEdit;
* a :array[1..10] of boolean; //不应定义为局部变量,这里只是作为例子
begin
edittext[1]:=Edit1;
edittext[2]:=Edit2;
edittext[3]:=Edit3;
edittext[4]:=Edit4;
edittext[5]:=Edit5;
edittext[6]:=Edit6;
edittext[7]:=Edit7;
edittext[8]:=Edit8;
edittext[9]:=Edit9;
edittext[10]:=Edit10;


for i:=1 to 5 do
if edittext.text='' then
a:=true;
end;
 
定义10个boolen,if a edit selected then ture
if edit a new record , then replace all boolen with false ,
redo it
 
演示:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i:= 0 to Form1.ComponentCount - 1 do
begin
if (Form1.Components is TEdit) then
if trim(TEdit(Form1.Components).text) <> '' then
showmessage(Form1.Components.Name + '填写了 ')
else
showmessage(Form1.Components.Name + '没有填写 ')
end;
end;
 
没错,循环
 
一,所有的edit都是用同一个事件;
二,先对edit的tag(taborder也可以)进行编号;
在程序中就可以知道是哪一个edit了
 
设置这几个EDIT的TAG为从1至10,申请一个FRet : array [1..3] of Boolean数组,
在EDIT1的ONEXIT事件中如下写: if TEdit(Sender).Text = '' then
FRet[TEdit(Sender).Tag]:=True
else
FRet[TEdit(Sender).Tag]:=false;
其它EDIT可以共用这一个事件
再在确认时做一个循环,依次检查每个BOOL的值就可以了。
 
在 每个edit的 Onchange 事件中加入检查,
if edit1.text <> null then edit1.tag := 1 else edit1.tag := 0;
... 10 依次类推,很简单的说。
 
判断edit.text是否为空。
难道这需要两天?
 

一个个判断,笨点,但也能很快解决问题啊~~~~

 
//你这个问题我以前是用来做动态报表的,很实用啊。
//比用数组的方法好一点点是因为不用管它有多少个TEdit 。
//下面程序段是经测试通过了的。改一下就能用上了。
procedure TForm1.BitBtn1Click(Sender: TObject);
var
n:integer; //循环变量
str1,str2:string; //记录 TEdit 使用情况
i,j:integer; //计数用
begin
str1:='填写项:';
str2:='没填写项:';
i:=0;
j:=0;
for n:= 0 to ComponentCount - 1 do
begin
if (Components[n] is TEdit) then
//过滤出 TEdit 类组件
begin
if ((Components[n]) as TEdit).text ='' then
begin
str2:=str2+Components[n].name+' ';
i:=i+1;
end
else
begin
str1:=str1+Components[n].name+' ';
j:=j+1;
end;
end;
end;
showmessage(Str1+'共'+IntToStr(j)+'项'+#13+
Str2+'共'+IntToStr(i)+'项');
end;
 
ilovedelphi4,
如果按你的提问看的话,那么问题已经解决咯~~~~~~~~~~~~
 
接受答案了.
 
后退
顶部