起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 253|回复: 5

【搞定】帮我看看用这种方式调用子窗体及子窗体返回值问题出在哪里?[请求]**

[复制链接]
发表于 2007-5-31 09:09:48 | 显示全部楼层 |阅读模式
//----------------- 主窗体调用代码 ---------------------
procedure TMainForm.Button1Click(Sender: TObject);
var
  f: COMMONFORMS.TCommonSelectForm;
  lResultStr: String;
begin
  f := COMMONFORMS.TCommonSelectForm.Create(Context);

  COMMONFORMS.TCommonSelectForm.IniFormObject(InfoBrokerYWXX1.Info,
                                         dsWhere.DataSet,dsResult.DataSet,
                                         'dsWhere', 'RESULT_G.FormDoc',
                                         2,'ID');
  if f.ShowModal = Business.Forms.Controls.mrOK then
  begin
    //字窗体定定义 Public  static function ResultValue(): String;
    lResultStr := COMMONFORMS.TCommonSelectForm.ResultValue();
    Dialogs.ShowMessage(lResultStr);
  end;
end;

//----------------- 子窗体调用接口过程代码 -------------------
static procedure TCommonSelectForm.IniFormObject(AInfo: TInfo;
                                           AdsQueryWhere,AdsQueryResult: TDataSet;
                                           AWhereDataSetID, AResultDodID: String;
                                           AMode:Integer = 1; ADefaultKey: String='');
var
  lForm: TCommonSelectForm;
begin
  lForm:= TCommonSelectForm.Create(nil);
  try
    lForm.InfoBroker1.Info := AInfo;
    lForm.dsQueryWhere.InfoBroker := lForm.InfoBroker1;
    lForm.dsQueryWhere.DataSetID := AWhereDataSetID;
    lForm.DocView1.DocClassID := AResultDodID;

    AdsWhere := AdsQueryWhere;
    AdsResult := AdsQueryResult;
    AdsWhereDataSetID := AWhereDataSetID;
    ASelectMode := AMode;
    ADefaultKeyField := ADefaultKey;
    AKeyFieldValue := '';
  except
    Dialogs.ShowMessage('传入参数错误');
  end;
end;

//----------------- 子窗体 "确定" 按钮代码 ------------
procedure TCommonSelectForm.sbConfirmClick(Sender: TObject);
var
  li: Integer;
begin
  if AdsResult.IsEmpty then
  begin
    Self.ModalResult := Business.Forms.Controls.mrCancel
  end else
    Self.ModalResult := Business.Forms.Controls.mrOk;
end;

//----------------- 子窗体 "取消" 按钮代码 ------------
procedure TCommonSelectForm.sbExitClick(Sender: TObject);
begin
  Self.ModalResult := Business.Forms.Controls.mrCancel;
  Close;
end;
回复

使用道具 举报

发表于 2007-5-31 18:23:18 | 显示全部楼层
f := COMMONFORMS.TCommonSelectForm.Create(Context);
这里创建了窗体
  COMMONFORMS.TCommonSelectForm.IniFormObject(InfoBrokerYWXX1.Info,
                                         dsWhere.DataSet,dsResult.DataSet,
                                         'dsWhere', 'RESULT_G.FormDoc',
                                         2,'ID');
在这里又创建了窗体
  if f.ShowModal = Business.Forms.Controls.mrOK then
这里又访问第一个创建的窗体,怎么会又参数呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-1 11:49:07 | 显示全部楼层
我现在主窗体调用代码改为如下:
procedure TMainForm.Button1Click(Sender: TObject);
var
  lResultStr: String;
begin
  with COMMONFORMS.TCommonSelectForm.Create(nil) do
  try
    IniFormObject(InfoBrokerYWXX1.Info,dsWhere.DataSet,dsResult.DataSet,'dsWhere', 'RESULT_G.FormDoc',2,'ID');
    //if Self.ModalResult = Business.Forms.Controls.mrOk then
    //begin
      lResultStr := ResultValue();
      Dialogs.ShowMessage(lResultStr);
    //end;
  finally
    Free;
  end;
end;

但是有两个问题:
1.如果加上 if Self.ModalResult = Business.Forms.Controls.mrOk then 句,则条件为假;
2.lResultStr := ResultValue()   调用子窗体函数返回值为空(在子窗体中显示不为空)。
回复 支持 反对

使用道具 举报

发表于 2007-6-1 13:33:15 | 显示全部楼层
1 定义成普通的函数,不要定义成static函数
2 不是if Self.ModalResult = Business.Forms.Controls.mrOk then
而是if ShowModal = Business.Forms.Controls.mrOk then
3 ResultValue也不要定义成Static函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-1 13:42:58 | 显示全部楼层
取消了static函数后,在调用这个函数时会报“只能访问类型的静态成员或构造方法”啊

COMMONFORMS.TCommonSelectForm.IniFormObject(InfoBrokerYWXX1.Info,dsWhere.DataSet,dsResult.DataSet,'dsWhere', 'RESULT_G.FormDoc',2,'ID');
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-1 14:19:50 | 显示全部楼层
问已经解决了,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-11 04:24 , Processed in 0.036905 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表