delphi,N个edit控件,1个button控件,做修改操作的时候,无论在哪个edit中输入,单击button都成功修改并
提示成功,如果全部不填,单击button时提示‘没用做如何修改’,这个判断语句怎么写?(修改的数据会插入数据库)...
提示成功,如果全部不填,单击button时 提示‘没用做如何修改’,这个判断语句怎么写?(修改的数据会插入数据库)
展开
5个回答
展开全部
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure myEditChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
edtvaluelist: tstringlist;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
flag: boolean; //声明一个标记用来记录是否有edit修改过
remsg: string; //记录修改过的edit名字,用于测试,实际过程中可不用
begin
flag := false;
for i:= 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is TEdit then //如果还有其他的edit控件,就把这几个需要做修改的edit名字改成同一个开头(例如myedt1、myedt2.....myedtN),并在此处根据名字来判断 if pos('myedt', self.Components[i].Name) > 0 then
begin
if (self.Components[i] as TEdit).Tag = 1 then //如果为1说明是修改过的,则执行你写入数据库的代码
begin
//...... //这里写你自己需要的处理代码
(self.Components[i] as TEdit).Tag := 0; //处理完毕后记得把tag重新标记为0
flag := true; //把是否修改的标记改为 “真”
if remsg = '' then
remsg := (self.Components[i] as TEdit).Name
else
remsg := remsg + ',' + (self.Components[i] as TEdit).Name;
end;
end;
end;
if not flag then
showmessage('没有做任何修改!')
else
showmessage(remsg + #13#10 + '修改成功!');
end;
procedure TForm1.myEditChange(Sender: TObject);
var
newstr: string;
begin
newstr := (Sender as TEdit).Text;
if edtvaluelist.Values[(Sender as TEdit).Name] <> newstr then //如果改变后的字符串和之前记录的不同
begin
(Sender as TEdit).Tag := 1; //把tag置为1
edtvaluelist.Values[(Sender as TEdit).Name] := newstr; //更新字符串列表为新值
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
edtvaluelist := tstringlist.Create; //创建一个公共字符串列表用来存储各edit当前的值格式为 'edit.name=edit.text' 方便后续调用 等号前面的为字符串的name,等号后面的为字符串的value
for i:= 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is TEdit then //如果还有其他的edit控件,就把这几个需要做修改的edit名字改成同一个开头(例如myedt1、myedt2.....myedtN),并在此处根据名字来判断 if pos('myedt', self.Components[i].Name) > 0 then
begin
(self.Components[i] as TEdit).Tag := 0; //把tag的初始值置为0 用于后续提交时候的判断
edtvaluelist.Add((self.Components[i] as TEdit).Name + '=' + (self.Components[i] as TEdit).Text); //循环把符合要求的edit的值写入字符串列表用于后续onchange的比较
end;
end;
//showmessage(edtvaluelist.Text);
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
edtvaluelist.Free; //释放
end;
end.
//亲测可行,所有n个edit控件的onchange事件都选择
procedure TForm1.myEditChange(Sender: TObject);
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure myEditChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
edtvaluelist: tstringlist;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
flag: boolean; //声明一个标记用来记录是否有edit修改过
remsg: string; //记录修改过的edit名字,用于测试,实际过程中可不用
begin
flag := false;
for i:= 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is TEdit then //如果还有其他的edit控件,就把这几个需要做修改的edit名字改成同一个开头(例如myedt1、myedt2.....myedtN),并在此处根据名字来判断 if pos('myedt', self.Components[i].Name) > 0 then
begin
if (self.Components[i] as TEdit).Tag = 1 then //如果为1说明是修改过的,则执行你写入数据库的代码
begin
//...... //这里写你自己需要的处理代码
(self.Components[i] as TEdit).Tag := 0; //处理完毕后记得把tag重新标记为0
flag := true; //把是否修改的标记改为 “真”
if remsg = '' then
remsg := (self.Components[i] as TEdit).Name
else
remsg := remsg + ',' + (self.Components[i] as TEdit).Name;
end;
end;
end;
if not flag then
showmessage('没有做任何修改!')
else
showmessage(remsg + #13#10 + '修改成功!');
end;
procedure TForm1.myEditChange(Sender: TObject);
var
newstr: string;
begin
newstr := (Sender as TEdit).Text;
if edtvaluelist.Values[(Sender as TEdit).Name] <> newstr then //如果改变后的字符串和之前记录的不同
begin
(Sender as TEdit).Tag := 1; //把tag置为1
edtvaluelist.Values[(Sender as TEdit).Name] := newstr; //更新字符串列表为新值
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
edtvaluelist := tstringlist.Create; //创建一个公共字符串列表用来存储各edit当前的值格式为 'edit.name=edit.text' 方便后续调用 等号前面的为字符串的name,等号后面的为字符串的value
for i:= 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is TEdit then //如果还有其他的edit控件,就把这几个需要做修改的edit名字改成同一个开头(例如myedt1、myedt2.....myedtN),并在此处根据名字来判断 if pos('myedt', self.Components[i].Name) > 0 then
begin
(self.Components[i] as TEdit).Tag := 0; //把tag的初始值置为0 用于后续提交时候的判断
edtvaluelist.Add((self.Components[i] as TEdit).Name + '=' + (self.Components[i] as TEdit).Text); //循环把符合要求的edit的值写入字符串列表用于后续onchange的比较
end;
end;
//showmessage(edtvaluelist.Text);
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
edtvaluelist.Free; //释放
end;
end.
//亲测可行,所有n个edit控件的onchange事件都选择
procedure TForm1.myEditChange(Sender: TObject);
更多追问追答
追问
逻辑好强。意思是明白了。但是这个公共字符串列表是哪个控件是tvaluestringlist吗
追答
edtvaluelist: tstringlist;
这个字符串列表并非控件,而是一个tstringlist类型的变量
2012-03-21 · 知道合伙人软件行家
关注
展开全部
1. 设置Edit 控件的响应OnChange,当改变时设置其Tag属性为1,没改变设置为0
2. 在button的OnClick事件里编写代码:
循环读取当前窗体中每个Edit控件的Tag属性,如果change了,就修改。
如果每个Tag都是0,那么提示‘没用做如何修改’
2. 在button的OnClick事件里编写代码:
循环读取当前窗体中每个Edit控件的Tag属性,如果change了,就修改。
如果每个Tag都是0,那么提示‘没用做如何修改’
追问
你的方法听起来,不错。但是不知道怎么设置edit的响应onchange。你的总体思路,能做成大概的实例不?这样我比较好理解,拜托了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var
Edt:array of TEDIT;
i,sum:integer;
begin
setlength(edt,,N);
for i:=0 to N-1 do
begin
Edt[i]:=TEdit.Create(self);
if Edit[i].text <>'' then
//数据提交
else
begin
sum:=sum+1;
continue;
end;
end
if Sum=N then showmessage('没做任何修改!');
end;
布吉岛对不对,笨办法!
Edt:array of TEDIT;
i,sum:integer;
begin
setlength(edt,,N);
for i:=0 to N-1 do
begin
Edt[i]:=TEdit.Create(self);
if Edit[i].text <>'' then
//数据提交
else
begin
sum:=sum+1;
continue;
end;
end
if Sum=N then showmessage('没做任何修改!');
end;
布吉岛对不对,笨办法!
更多追问追答
追问
数据提交的时候,提交的每个edit赋的值都不一样,你这个好像不行吧?
追答
edit[i].text就是变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 初始化:button.Enabled:=False;
2 N个edit的OnChange事件关联到同一个事件。
3 该事件下:button.Enabled:=True;
2 N个edit的OnChange事件关联到同一个事件。
3 该事件下:button.Enabled:=True;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个全局变量做标识,把所有edit的OnChange事件指向一个,然后再判断
追问
本人菜鸟,能给个大概的模型不,因为你的意思我能理解,但就是苦于不会写。麻烦了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询