首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 子窗口如何在父窗口中退出 [已结贴,结贴人:xuxugr]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuxugr
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-19 00:14:40 楼主
    在管理系统中查询当前窗口用户是否有权限打开,如果可以执行,如果不行则提示'你没有权限,不能打开'

    Frm_bargain的onshow事件中
    Frm_Main.ModuleIfTrue(Data1.ADOQuery8,Frm_bargain);//在Frm_Main父文件中查询Frm_bargain当前用户是否能打开,
    --------

    而在
    procedure TFrm_Main.ModuleIfTrue(ADOQuery3: TADOQuery; Frm: TForm);的事件中

    if ADOquery3.RecordCount <1 then
      begin
        Application.MessageBox('对不起了,你没有权限,不能打开','提示',mb_ok);
        exit;
      end;

    可以只是将TFrm_Main窗体退出了,可是Frm_bargain的on show 事件中
    Frm_Main.ModuleIfTrue(Data1.ADOQuery8,Frm_bargain);后面的代码仍会执行,exit无法退出,abort也不行,Terminate也不行,那怎么退出呢
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kernelj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 07:49:331楼 得分:0
    你试试指定对象:

    Frm.Terminate
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuxugr
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 08:14:112楼 得分:0
    可能我表达错了,我只是希望如果没有权限,那么Frm_Main.ModuleIfTrue(Data1.ADOQuery8,Frm_bargain);后面的代码就不要执行了,如果要么赋给frm_main变量一个值,然后子窗口先读取是否有权限也可以,我试试先
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuxugr
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 08:29:523楼 得分:0
    Terminate只能和application搭配吧,直接和对象我不知道怎么操作
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kernelj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 08:39:174楼 得分:0
    引用 1 楼 kernelj 的回复:
    你试试指定对象:

    Frm.Terminate


    的确是个错误的用法。

    按照你的意思 exit 是对的,你主要应该检查你的条件是否成立,设置断点看看。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuxugr
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 08:44:485楼 得分:0
    简单说吧,如何在窗体的onshow事件中退出,
    procedure Tfrm_ygxill.FormShow(Sender: TObject);
    begin
    close;
    end;
    这样也不行呀
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kernelj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 08:52:506楼 得分:20
    如果转换下处理逻辑呢,先检查权限,再去决定是否 show 该窗体
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaobaoqi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 08:57:367楼 得分:60
    如果你仅仅是在SHOW事件中将当前窗体关闭的话!方法应该很多
    Delphi(Pascal) code
    procedure TForm3.FormShow(Sender: TObject); begin ShowMessage('1'); PostMessage(Handle,WM_CLOSE,0,0); Exit; ShowMessage('2'); end;

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fenger8293
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 09:03:328楼 得分:20
    感觉楼主的语文很不过关,看着怎么都看不明白,"如果要么赋给frm_main","可以只是将TFrm_Main窗体退出了"
    我听得都很迷糊.
    你不会把你的procedure ModuleIfTrue改成function ModuleIfTrue():Boolean;根据函数返回确定打开不打开子窗体.
    在onshow事件里好象不能对窗体进行close,visible等做修改,如果可以最好也不要这样做.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuxugr
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 09:13:269楼 得分:0
    呵呵,语文是不过关,不过也有人看得懂呀,一开始我没说清楚,到后来我发现只是在onshow事件中退出就可以了,呵呵 xiaobaoqi 说的不错
    至于
    如果转换下处理逻辑呢,先检查权限,再去决定是否 show 该窗体
    我不知道在窗口的什么事件中判断
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • scutLiu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 09:40:1810楼 得分:0
    我觉得改变一下业务逻辑可能更合适
    先判断是否有权限,再决定是否创建子窗体并显示
    在OnShow里面判断权限来决定是否打开不是一个理想的选择
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaobaoqi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:40:5011楼 得分:0
    不过还是建议 改变一个业务逻辑
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved