当前位置:主页>销售管理软件> 列表

怎样在MDI窗体中的一个窗体中更新另一个窗体的数据!!!请 找傻瓜进销存

财务软件版1楼: 在SDI窗体中,一个窗体可以更新另一个窗体的DataGrid数据,
但在MDI窗体中却不行,我已试了好多天了,一直不行!好像必须是关闭再打开那个有DataGrid的窗体才可以更新数据!请大家指点!!!

2楼: SDI窗体没有被释放,应该是可以更新的 如傻瓜进销存

3楼: 发送消息

4楼: datagrid.refresh

5楼: 谢谢大家的回复!
怎么发送消息呀?
我用的MDI窗体,不是SDI的!
用dbgrid.refresh根本没有反应!
用ADOTable.close;
ADOTable.open;
只可以更新本窗体的数据!从一个窗体更新到另一个窗体就是不行!

6楼: 定义刷新消息。然后在一个里面发送该消息,在另外一个窗体中响应并作出相应的动作。

财务软件版7楼: 窗体a向窗体b发送消息
a首先要获得b的句柄
TFetchDataFm = class(TForm) //a窗体
BitBtn1: TBitBtn;
ADOQuery1: TADOQuery;
GroupBox1: TGroupBox;
private
{ Private declarations }
FWSNADDR:string;
public
{ Public declarations }
MsgHandle:HWND;
end;

//
在a创建完毕的时候a.Msghandle:=b.Handle;


要更新时发送消息
a.sendmessage(Msghandle,wm_user+2001,0,0);
在b中

TMainFm= class(TForm) //b窗体
private
{ Private declarations }
procedure RefCallTimes(var message: TMessage); message wm_user+2001;
public
{ Public declarations }
end;
...
procedure TMainFm.RefCallTimes(var message: TMessage);
begin
ADOTable.close;
ADOTable.open;
end;

8楼: 谢谢您的回答!
我是用以下的方法来创建form的!
function TfrmMain.CreateForm(App:TApplication;Component:TComponentClass):TComponent;
var
form:TForm;
begin
App.CreateForm(Component,form);
form.WindowState:=wsMaximized;
form.FormStyle:=fsMDIChild;
form.CloseQuery;
if form.Active=true then
//TCloseAction(Action):=caFree;
Result:=form;
end;
用方法 CreateForm(Application,Tform)来实现窗体的实例化的!
我觉得是这个方法导致的后果不能更新另外一个窗体的数据,回为它并没有真正的实例化一个对象!只是不确定的对象了!有您的消息传递方法还是不能够更新数据!
如果用系统单元Forms的CreateForm(TForm,form);来创建窗体就可以更新数据了!


最后谢谢大家的支持!