delphi,N个edit控件,1个button控件,做修改操作的时候,无论在哪个edit中输入,单击button都成功修改并

提示成功,如果全部不填,单击button时提示‘没用做如何修改’,这个判断语句怎么写?(修改的数据会插入数据库)... 提示成功,如果全部不填,单击button时 提示‘没用做如何修改’,这个判断语句怎么写?(修改的数据会插入数据库) 展开
 我来答
遒劲且威武的小白桦s
2012-03-22 · TA获得超过115个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:189万
展开全部
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);
更多追问追答
追问
逻辑好强。意思是明白了。但是这个公共字符串列表是哪个控件是tvaluestringlist吗
追答
edtvaluelist: tstringlist;
这个字符串列表并非控件,而是一个tstringlist类型的变量
windblast
2012-03-21 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13617
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部
1. 设置Edit 控件的响应OnChange,当改变时设置其Tag属性为1,没改变设置为0

2. 在button的OnClick事件里编写代码:

循环读取当前窗体中每个Edit控件的Tag属性,如果change了,就修改。
如果每个Tag都是0,那么提示‘没用做如何修改’
追问
你的方法听起来,不错。但是不知道怎么设置edit的响应onchange。你的总体思路,能做成大概的实例不?这样我比较好理解,拜托了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qian2988
2012-03-22 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:125万
展开全部
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;

布吉岛对不对,笨办法!
更多追问追答
追问
数据提交的时候,提交的每个edit赋的值都不一样,你这个好像不行吧?
追答
edit[i].text就是变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HJ_3000
2012-03-22 · TA获得超过563个赞
知道小有建树答主
回答量:1264
采纳率:78%
帮助的人:45.5万
展开全部
1 初始化:button.Enabled:=False;
2 N个edit的OnChange事件关联到同一个事件。
3 该事件下:button.Enabled:=True;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyjying520
2012-03-21 · TA获得超过225个赞
知道小有建树答主
回答量:436
采纳率:100%
帮助的人:367万
展开全部
用一个全局变量做标识,把所有edit的OnChange事件指向一个,然后再判断
追问
本人菜鸟,能给个大概的模型不,因为你的意思我能理解,但就是苦于不会写。麻烦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式