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

提示成功,如果全部不填,单击button时 提示‘没用做如何修改’,这个判断语句怎么写?(修改的数据会插入数据库)

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类型的变量

追问

这个变量报错

追答

var
Form1: TForm1;
edtvaluelist: tstringlist;
implementation

{$R *.dfm}

//变量声明的位置要对,因为是全局变量 要声明在头部

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-21
1. 设置Edit 控件的响应OnChange,当改变时设置其Tag属性为1,没改变设置为0

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

循环读取当前窗体中每个Edit控件的Tag属性,如果change了,就修改。
如果每个Tag都是0,那么提示‘没用做如何修改’追问

你的方法听起来,不错。但是不知道怎么设置edit的响应onchange。你的总体思路,能做成大概的实例不?这样我比较好理解,拜托了

第2个回答  2012-03-22
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就是变量

追问

我知道啊,赋值语句是这样fieldbyname('字段1').asstring:=edit[i].text但是字段不一样啊,难道要这fieldbyname('字段1').asstring:=edit[i].text;
fieldbyname('字段1').asstring:=edit[i].text;
。。。

追答

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 break
else
begin
showmessage('没做任何修改!');
exit;
end;

if adoquery.active=false then adoquery.active:=true;
with adoquery do
begin
close;
open;
insert;
fieldbyname('字段').asstring:=edit[0].text;
fieldbyname('字段1').asstring:=edit[1].text;
fieldbyname('字段2').asstring:=edit[i].text;
end;
showmessage('插入成功!')
这样呢?你每个edit对应的字段不一样就只能这样赋值了。
end;

第3个回答  2012-03-22
1 初始化:button.Enabled:=False;
2 N个edit的OnChange事件关联到同一个事件。
3 该事件下:button.Enabled:=True;
第4个回答  2012-03-21
用一个全局变量做标识,把所有edit的OnChange事件指向一个,然后再判断追问

本人菜鸟,能给个大概的模型不,因为你的意思我能理解,但就是苦于不会写。麻烦了

delphi 怎么在另外一个程序的EDIT里 输入字符呢?
首先确保你的程序在运行时拥有足够的权限,比如使用管理员运行。通过FindWindow函数找到你想要控制的程序,比如通过主窗口的名称或者类名,如果你不知道,可以用Spy++这样的小工具来找。然后继续通过FindWindow在父窗口中通过WindowsClass名找到你要控制的Edit,函数将会返回一个窗口句柄。然后你通过SendMessage(...

在DELPHI的EDIT中输入的内容怎么样不被修改,我在Edit中输入了一些内容...
设置属性ReadOnly=true

delphi 一个Label一个Edit 在Edit中输入搜索内容按下回车键后跳出一个...
这个在edit中输入搜索内容按下回车键路出一个窗口,这个触发操作需要写在edit框的onKeyDown事件中,至于显示搜索内容,引用数据库 给你个最简单的ADO示例 数据库 db_a(序号,关键字,内容)adoquery1.sql.text:='select * from db_a where 关键字 like '+quotedstr('%'+edit1.text+'%');adoq...

delphi中的edit怎么设为只读后没有光标也没有焦点
1.在窗口上点右键,有个tab order可以改变窗口上的tab顺序 2.button上其实也可以实现的,我觉得你可以这样试试。你的主要目的是按回车后直接tab到下一个控件,可以在当前控件比如说你有一个Edit1,在edit1的onkeypress事件下写:if Key=13(或者按你上面的写)then button1.setfocus(); (button1是...

DELPHI 中如何让edit1.text只能输入数字和字母
你可以通过Edit1控件的KeyPress事件来进行控制。KeyPress中有个参数Key,当键盘输入时。你可以对Key进行判断,下面是一个只接收0-9,小数点和退格、回车、ESC的例子:If not (Key in ['0'..'9','.',#27,#13,#8]) then Key:=#0 Else Key:=SendKey;end;...

Delphi中在Edit这个控件里怎么让光标始终停留在数据后面?而不是每个更...
Edit1.selStart:= length(Edit1.Text);end;应该写这吧 不过这种控制实在是不人性化 确实KEYDOWN只能在输入时触发,但是根据楼主的要求,很明显是要求输入时候做此限制,他的意思应该是输入的时候不可以随意调整光标位置,如果通过代码赋值,根本不会存在此需求,另外之所以写在keydown里面而不写在OnChang...

DELPHI中Tedit1 button1 FileListBox1,如何实现Tedit输入文字单击button...
直接在Button的onClick里写 var i: Integer;s:String;begin for i := FileListBox1.items.count-1 do if Pos(TEdit1.text,FileListBox1.items[i])>-0 s := s+#13+FileListBox1.items[i]);FileListBox1.items.Text := TEdit1.text end FileListBox1.items就是一个TStrings,可以...

delphi的edit控件中实现除法功能
1、在界面上放三个edit控件,一个按钮控件,一个edit作为被除数输入,第二个作为除数输入。第三个显示结果。2、在按钮的单击事件中,写上这么一句:edit3.text:=currTostr(strTocurr(edit1.text)\/strTocurr(edit2.text));currTostr把有小数点的数值转换为字符的函数。strTocurr则相反。3、运行程序,...

delphi中控件多的时候的处理方法
这些控件的个别属性是可以同时控制的.比如他的Enable属性,visible属性,或者设置他们的text.clear:for i := 0 to ComponentCount - 1 do begin if self.Components[i] is TEdit then (Components[i] as TEdit).Enabled := false;\/\/设置所有的Edit控件为不可用.end;...

Delphi Edit组件的奇怪问题,怎么某窗体上的Edit老是自动选择中文输入...
Formshow中加入下面代码,将所有的编辑框的默认输入法都设置为默认.\/\/所有编辑框输入法 inherited;for i:=0 to Self.ComponentCount-1 do begin if Self.Components[i] is TEdit THEN begin (Self.Components[i] as TEdit).imename:= '';(Self.Components[i] ...

相似回答