24 个解决方案
#1
引用B窗体后,就可以直接修改.
#2
也就是说,我动态产生多个同一个类的窗体,我只想其中一个窗体的DATASET的值改变
#3
uses
TypInfo;
var
PropInfo: PPropInfo; // 要使用 TypInfo 单元
begin
for k := 0 to Self.ControlCount-1 do
begin
propInfo := GetPropInfo(Self.Controls[k], 'Width');
if propInfo <> nil then // 存在属性
self.Controls[k].Width := 200;//改变属性
end;
end;
TypInfo;
var
PropInfo: PPropInfo; // 要使用 TypInfo 单元
begin
for k := 0 to Self.ControlCount-1 do
begin
propInfo := GetPropInfo(Self.Controls[k], 'Width');
if propInfo <> nil then // 存在属性
self.Controls[k].Width := 200;//改变属性
end;
end;
#4
如何知道判断是那一个实例窗体
#5
procedure Tform1.CreateForm2(QuerySum:TQuery);
form2:Tform2;
begin
form2:=Tform2.Create(Application);
form2.DataSource1.DataSet:=QuerySum;
...
end;
form2:Tform2;
begin
form2:=Tform2.Create(Application);
form2.DataSource1.DataSet:=QuerySum;
...
end;
#6
不明白
#7
3楼的方法可以。
#8
这个是在创建的时候使用,创建后,我在程序中如何再进行DataSet值的修改
#9
將DataSet傳入你生成实例窗体
#10
不明白,能否详细说明?
#11
简单明了点,用句柄吧,向某个句柄的B窗体发消息,B窗体中写消息接收函数,接收到后改变dataset
#12
嘻嘻,对句柄不熟悉。应该看什么资料,或者,能否给个例子,这问题,搞了半年多了。
#13
每创建一个窗体,窗体本身都会有一个Handle属性,你把创建的所有窗体的Handle属性记录下来,然后
SendMessage(Handle,你得消息,0,0);
B窗体上写消息的接收函数,当收到"你得消息"后,改变dataset
SendMessage(Handle,你得消息,0,0);
B窗体上写消息的接收函数,当收到"你得消息"后,改变dataset
#14
SendMessage(Handle,你得消息,0,0);
这句,我应该如何写??
例如:将'Doc00000015'这个数值传到其中一个动态产生的窗体中的DATASET.FieldByName('doccode').value
在发送窗体如何编写?
在接收窗体如何编写?
#15
就算是动态产生的窗口,也有name属性吧,引用name属性不就行了。
#16
n个B窗体和1个B窗体也没差别啊,都是同一个类的实例,该怎么改就怎么改呗
#17
如何引用?
#18
procedure TForm1.Button1Click(Sender: TObject);
var
b: TButton;
begin
b := TButton.Create(Form1);
b.Parent := Form1;
b.Name := 'b1';
b.Caption := 'mybutton';
b.Visible := True;
b.Top := 10;
b.Left := 10;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(FindComponent('b1') as TButton).Caption := 'OK';
end;
#19
直接说你要做什么要好一点,看你的问题貌似你要在不同的窗体取数据库中的数据?
如果这样不是很好实现的吗?还是我理解有误?
新建一个Datamodule块,放上操作数据库的控件,在那么多的窗体中新建临时的数据集:
....
cds := TClientDataSet.Create(nil);
try
With DataModule1.BDEClientDataSet1 do
begin
Active := False;
CommandText := String(SqlString); //SQLString---sql语句查询
Active := True;
cds.Data := Data;
Active := False;
end;
....
Finally
cds.Free;
end;
。。。。
如果要修改或插入数据,就定义一个TQuery对象:var qry: TQuery;
...
qry := TQuery.Create(nil);
try
qry.DataBase := DataModule1.BDEClientDataSet1.DatabaseName;
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(sqlstr);//sqlstr为SQL语句
qry.ExecSQL;
finally
qry.Free;
end;
...
如果这样不是很好实现的吗?还是我理解有误?
新建一个Datamodule块,放上操作数据库的控件,在那么多的窗体中新建临时的数据集:
....
cds := TClientDataSet.Create(nil);
try
With DataModule1.BDEClientDataSet1 do
begin
Active := False;
CommandText := String(SqlString); //SQLString---sql语句查询
Active := True;
cds.Data := Data;
Active := False;
end;
....
Finally
cds.Free;
end;
。。。。
如果要修改或插入数据,就定义一个TQuery对象:var qry: TQuery;
...
qry := TQuery.Create(nil);
try
qry.DataBase := DataModule1.BDEClientDataSet1.DatabaseName;
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(sqlstr);//sqlstr为SQL语句
qry.ExecSQL;
finally
qry.Free;
end;
...
#20
就算是动态产生的窗口,也有name属性吧,引用name属性不就行了。
procedure TForm1.Button1Click(Sender: TObject);
var
b: TButton;
begin
b := TButton.Create(Form1);
b.Parent := Form1;
b.Name := 'b1';
b.Caption := 'mybutton';
b.Visible := True;
b.Top := 10;
b.Left := 10;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(FindComponent('b1') as TBu…
这样也是可以的 ,只是操作起来不是很方便
#21
关注这个问题
#22
更改属性并不难,可是你要找的这个窗体,总要有点依据吧?窗体标题名称?还是实例名?不然用啥方法也是白扯啊
#23
简单说,一个类产生了多个实例,就是如何找到这一个类的其中的一个实例
#24
用句柄吧,发消息给你要找的窗体,接收到消息后,返回给你一个信息,告诉你要找的是哪个类
#1
引用B窗体后,就可以直接修改.
#2
也就是说,我动态产生多个同一个类的窗体,我只想其中一个窗体的DATASET的值改变
#3
uses
TypInfo;
var
PropInfo: PPropInfo; // 要使用 TypInfo 单元
begin
for k := 0 to Self.ControlCount-1 do
begin
propInfo := GetPropInfo(Self.Controls[k], 'Width');
if propInfo <> nil then // 存在属性
self.Controls[k].Width := 200;//改变属性
end;
end;
TypInfo;
var
PropInfo: PPropInfo; // 要使用 TypInfo 单元
begin
for k := 0 to Self.ControlCount-1 do
begin
propInfo := GetPropInfo(Self.Controls[k], 'Width');
if propInfo <> nil then // 存在属性
self.Controls[k].Width := 200;//改变属性
end;
end;
#4
如何知道判断是那一个实例窗体
#5
procedure Tform1.CreateForm2(QuerySum:TQuery);
form2:Tform2;
begin
form2:=Tform2.Create(Application);
form2.DataSource1.DataSet:=QuerySum;
...
end;
form2:Tform2;
begin
form2:=Tform2.Create(Application);
form2.DataSource1.DataSet:=QuerySum;
...
end;
#6
不明白
#7
3楼的方法可以。
#8
这个是在创建的时候使用,创建后,我在程序中如何再进行DataSet值的修改
#9
將DataSet傳入你生成实例窗体
#10
不明白,能否详细说明?
#11
简单明了点,用句柄吧,向某个句柄的B窗体发消息,B窗体中写消息接收函数,接收到后改变dataset
#12
嘻嘻,对句柄不熟悉。应该看什么资料,或者,能否给个例子,这问题,搞了半年多了。
#13
每创建一个窗体,窗体本身都会有一个Handle属性,你把创建的所有窗体的Handle属性记录下来,然后
SendMessage(Handle,你得消息,0,0);
B窗体上写消息的接收函数,当收到"你得消息"后,改变dataset
SendMessage(Handle,你得消息,0,0);
B窗体上写消息的接收函数,当收到"你得消息"后,改变dataset
#14
SendMessage(Handle,你得消息,0,0);
这句,我应该如何写??
例如:将'Doc00000015'这个数值传到其中一个动态产生的窗体中的DATASET.FieldByName('doccode').value
在发送窗体如何编写?
在接收窗体如何编写?
#15
就算是动态产生的窗口,也有name属性吧,引用name属性不就行了。
#16
n个B窗体和1个B窗体也没差别啊,都是同一个类的实例,该怎么改就怎么改呗
#17
如何引用?
#18
procedure TForm1.Button1Click(Sender: TObject);
var
b: TButton;
begin
b := TButton.Create(Form1);
b.Parent := Form1;
b.Name := 'b1';
b.Caption := 'mybutton';
b.Visible := True;
b.Top := 10;
b.Left := 10;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(FindComponent('b1') as TButton).Caption := 'OK';
end;
#19
直接说你要做什么要好一点,看你的问题貌似你要在不同的窗体取数据库中的数据?
如果这样不是很好实现的吗?还是我理解有误?
新建一个Datamodule块,放上操作数据库的控件,在那么多的窗体中新建临时的数据集:
....
cds := TClientDataSet.Create(nil);
try
With DataModule1.BDEClientDataSet1 do
begin
Active := False;
CommandText := String(SqlString); //SQLString---sql语句查询
Active := True;
cds.Data := Data;
Active := False;
end;
....
Finally
cds.Free;
end;
。。。。
如果要修改或插入数据,就定义一个TQuery对象:var qry: TQuery;
...
qry := TQuery.Create(nil);
try
qry.DataBase := DataModule1.BDEClientDataSet1.DatabaseName;
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(sqlstr);//sqlstr为SQL语句
qry.ExecSQL;
finally
qry.Free;
end;
...
如果这样不是很好实现的吗?还是我理解有误?
新建一个Datamodule块,放上操作数据库的控件,在那么多的窗体中新建临时的数据集:
....
cds := TClientDataSet.Create(nil);
try
With DataModule1.BDEClientDataSet1 do
begin
Active := False;
CommandText := String(SqlString); //SQLString---sql语句查询
Active := True;
cds.Data := Data;
Active := False;
end;
....
Finally
cds.Free;
end;
。。。。
如果要修改或插入数据,就定义一个TQuery对象:var qry: TQuery;
...
qry := TQuery.Create(nil);
try
qry.DataBase := DataModule1.BDEClientDataSet1.DatabaseName;
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(sqlstr);//sqlstr为SQL语句
qry.ExecSQL;
finally
qry.Free;
end;
...
#20
就算是动态产生的窗口,也有name属性吧,引用name属性不就行了。
procedure TForm1.Button1Click(Sender: TObject);
var
b: TButton;
begin
b := TButton.Create(Form1);
b.Parent := Form1;
b.Name := 'b1';
b.Caption := 'mybutton';
b.Visible := True;
b.Top := 10;
b.Left := 10;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(FindComponent('b1') as TBu…
这样也是可以的 ,只是操作起来不是很方便
#21
关注这个问题
#22
更改属性并不难,可是你要找的这个窗体,总要有点依据吧?窗体标题名称?还是实例名?不然用啥方法也是白扯啊
#23
简单说,一个类产生了多个实例,就是如何找到这一个类的其中的一个实例
#24
用句柄吧,发消息给你要找的窗体,接收到消息后,返回给你一个信息,告诉你要找的是哪个类