起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 522|回复: 10

【结贴】TForm DoModel 报错,麻烦帮看一下

[复制链接]
发表于 2010-4-8 17:03:43 | 显示全部楼层 |阅读模式
在使用TForm类DoModel时报错,错误信息如下:
---------------------------
X3 Studio
---------------------------
运行系统初始化的时候发生异常:Cannot make a visible window modal

类型:EInvalidOperation。
---------------------------
确定   
---------------------------

调用代码:
procedure TSCJHXX.FIELD_JBXX_F_ProductTypeButtonClick(Sender: TObject);
const
   strTypeCode = '产品类型';
var
   lstKeys:TStrings;
   lstValues:TStrings;
   frmType:TFrmCPSelect;
   frmTitle:string;
   strSelTypes :string;
   strSelKeys:string;
begin
   lstKeys:= Business.System.TStringList.Create;
   lstValues:= Business.System.TStringList.Create;
   frmTitle := '产品类型选择';
   try
      frmType := TFrmCPSelect.Create(nil);
      //设置窗体标题
      frmType.SetTitle(frmTitle);
      //获取产品类型列表
      MyCommonResouse.TMyCommonResouse.GetProductType(strTypeCode,lstKeys,lstValues);
      frmType.SetSelectItems(lstKeys,lstValues);
      if  frmType.ShowModal = Business.Forms.Controls.mrOk then
      begin
         strSelTypes := frmType.SelectType;
         strSelKeys := frmType.SelectKey;
         DataSetJBXX.FieldByName('F_ProductType').AsString := strSelKeys;
      end;
   finally
      lstKeys.Free;
      lstValues.Free;
   end;
end;
回复

使用道具 举报

发表于 2010-4-8 17:22:50 | 显示全部楼层
错误的代码停到那句上了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-8 17:35:01 | 显示全部楼层
停在
if  frmType.ShowModal = Business.Forms.Controls.mrOk then
回复 支持 反对

使用道具 举报

发表于 2010-4-8 17:52:49 | 显示全部楼层
资源集中的窗体中是否设置过Visible属性?
http://www.baidu.com/s?bs=delphi ... lphi+showmodal+mrok
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-8 17:54:38 | 显示全部楼层
现在showmodal能出来不过我在对窗体的ModalResult赋值为mrOk后仍然不进入then后的语句
回复 支持 反对

使用道具 举报

发表于 2010-4-8 17:58:11 | 显示全部楼层
编译一下看看,modalresult设置成mrok应该会进去的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-8 18:00:46 | 显示全部楼层
代码跟踪已经到self.ModalResult := mrOk;了,可判断时ModalResult仍然是2
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-8 18:04:20 | 显示全部楼层
ModalResult值是121922049,就好像没赋值一样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-8 18:22:26 | 显示全部楼层
窗体ok按钮事件代码如下:
procedure TFrmCPSelect.btnOKClick(Sender: TObject);
var
  i:Integer;
begin
try
  if self.HasSelected then
  begin
     FSelectType := '';
     FSelectKey := '';
     for i:=0 to chklst.Count -1 do
     begin
        if chklst.Checked then
        begin
        if FSelectType ='' then
          begin
            FSelectType := chklst.Items.Strings;
            FSelectKey := lstKeys.Strings;
          end
          else
            begin
            FSelectType := FSelectType + ','+chklst.Items.Strings;
            FSelectKey := FSelectKey +','+lstKeys.Strings;
            end;
        end;
     end;
     self.ModalResult := mrOk;
  end;
//  else
// self.ModalResult := mrCancel;
finally
  lstKeys.Free;
  self.Close;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2010-4-9 10:10:44 | 显示全部楼层
self.Close;   这个去掉。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-10 07:10 , Processed in 0.033851 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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