| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1287 人关注过本帖
标题:哈哈,这回是子窗体一闪而过了
只看楼主 加入收藏
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
结帖率:91.53%
收藏
已结贴  问题点数:100 回复次数:11 
哈哈,这回是子窗体一闪而过了
直接上代码吧,迷糊了
https://bbs.bccn.net/thread-460213-1-1.html
17楼的代码基础上,加了点东西
程序代码:
CLEAR ALL 
CLOSE PROCEDURES
SET PATH TO "..\MyTools"
SET PROCEDURE TO "MyForm", "MyLogin","otherForm"

PUBLIC gcUserName
Login("gcUserName")
IF !EMPTY(gcUserName)
    Main()
ENDIF 

CLOSE PROCEDURES
CLEAR ALL 
RETURN 

PROCEDURE Main()
    LOCAL loMainForm
    loMainForm = CREATEOBJECT("C_MainForm")
    WITH loMainForm
        .Caption = "主窗体"
        .Width = 600
        .Height = 400
        .AutoCenter = .T.
        .Show
    ENDWITH 
    READ EVENTS
ENDPROC 

DEFINE CLASS C_MainForm AS MyForm
    ShowWindow = 2
    
    ADD OBJECT Label1 AS Label WITH Caption = "欢迎您!" + gcUserName, FontSize = 36, AutoSize = .T.
    ADD OBJECT runOtherForm as commandButton WITH caption="运行另一表单",top=5,autoSize=.t.
    PROCEDURE Arrange
        WITH This.Label1
            .Top = (This.Height - .Height) / 2
            .Left = (This.Width - .Width) / 2
        ENDWITH 
    ENDPROC 
    
    PROCEDURE runOtherForm.click
        runOtherForm1()
    ENDPROC 
    
ENDDEFINE 


程序代码:
&&otherForm.prg
PROCEDURE runOtherForm1
    LOCAL otherForm1
    otherForm1=CREATEOBJECT("m1Form")
    otherForm1.show
    READ EVENTS
ENDPROC 

DEFINE CLASS m1Form as myForm
    &&showWindow=2
    caption="功能模块1窗口"
    width=500
    height=300
    autoCenter=.t.
    &&windowType=1
    
    ADD OBJECT button1 as commandButton WITH caption="返回主表单",top=5,autoSize=.t.
    
    PROCEDURE button1.click
        RELEASE thisform
    ENDPROC 
    
    PROCEDURE Destroy
        MESSAGEBOX("模块1表单销毁了",64,"123")
    ENDPROC
    
ENDDEFINE 


各窗体之间的工作交接流程,还是搞不明白。。。
2015-12-19 22:36
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
程序代码:
PROCEDURE runOtherForm1
    LOCAL otherForm1
    otherForm1=CREATEOBJECT("m1Form")
    otherForm1.show
    &&READ EVENTS
ENDPROC 

DEFINE CLASS m1Form as myForm
    showWindow=1
    caption="功能模块1窗口"
    width=500
    height=300
    autoCenter=.t.
    windowType=1


作为子表单,并且模式,并且不read Events,可以

不作为模式表单运行  还是直接销毁

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-19 22:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:100 
整个程序只需要一处READ EVENTS,嵌套是没用的。

授人以渔,不授人以鱼。
2015-12-19 22:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果你非要READ EVENTS,改成这样:

程序代码:
*-----------------------
* 登录示例
* [color=#800000]2015.12.15.[/color]
*-----------------------

CLEAR ALL 
CLOSE PROCEDURES
SET PATH TO "..\MyTools"
SET PROCEDURE TO "MyForm", "MyLogin", "MyTextBox"

PUBLIC gcUserName
Login("gcUserName")
IF !EMPTY(gcUserName)
    Main()
ENDIF 

CLOSE PROCEDURES
CLEAR ALL 
RETURN 

PROCEDURE Main()
    LOCAL loMainForm
    loMainForm = CREATEOBJECT("C_MainForm")
    WITH loMainForm
        .Caption = "主窗体"
        .Width = 600
        .Height = 400
        .AutoCenter = .T.
        .Show
    ENDWITH 
    READ EVENTS
ENDPROC 

DEFINE CLASS C_MainForm AS MyForm
    ShowWindow = 2
    
    ADD OBJECT Label1 AS Label WITH Caption = "欢迎您!" + gcUserName, FontSize = 36, AutoSize = .T.
    
    PROCEDURE Arrange
        WITH This.Label1
            .Top = (This.Height - .Height) / 2
            .Left = (This.Width - .Width) / 2
        ENDWITH 
    ENDPROC 
    
    ADD OBJECT runOtherForm as commandButton WITH caption="运行另一表单",top=5,autoSize=.t.

    PROCEDURE runOtherForm.click
        runOtherForm1()
    ENDPROC 
     
ENDDEFINE 

PROCEDURE runOtherForm1
     PUBLIC otherForm1
     otherForm1=CREATEOBJECT("m1Form")
     otherForm1.show
     READ EVENTS

 ENDPROC 


 DEFINE CLASS m1Form as MyForm
     showWindow=1
     caption="功能模块1窗口"
     width=500
     height=300
     autoCenter=.t.
     &&windowType=1
     
     ADD OBJECT button1 as commandButton WITH caption="返回主表单",top=5,autoSize=.t.
     
     PROCEDURE button1.click
         RELEASE thisform
     ENDPROC 
     
     PROCEDURE Destroy
         MESSAGEBOX("模块1表单销毁了",64,"123")
     ENDPROC
     

 ENDDEFINE 

授人以渔,不授人以鱼。
2015-12-19 22:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
子窗体自动释放的原因,是其对象实体otherForm1是LOCAL变量,它在PROCEDURE结束之后自动释放,把它改为PUBLIC全局变量,才会让第二个READ EVENTS事务keep住它。

授人以渔,不授人以鱼。
2015-12-19 22:57
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
想点击主窗体上的按钮后,运行一个顶层表单,因为有可能窗体大小超过主窗体

非模式表单,因为有可能需要同时运行主窗体的其他功能

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-19 22:58
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 5楼 TonyDeng
我看你的代码  都是local  我也就都local了  没想到还有这么大差别呢

其实就没想到这个  只注意窗体的showWindow和windowType了

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-19 23:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
要多窗体并行响应,可以用FormSet,仍然只有一个READ EVENTS。一个进程不可能同时处理两个顶层窗体——顶层窗体的意思是它是一个独立的进程!

授人以渔,不授人以鱼。
2015-12-19 23:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用不懂才问在2015-12-19 22:58:43的发言:

因为有可能窗体大小超过主窗体

Desktop = .T.
2015-12-19 23:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
顶层窗体的意思,就是这个窗体作为程序的总容器,如vfp的_SCREEN就是顶层窗体,所有ShowWindow=1的窗体,都归属在这个主窗体之下,不可能有尺寸比它大的,就如在非ShowWindow=2的情况下,做不出比_SCREEN还大的窗体(会被_SCREEN裁剪)。在vfp IDE中之所以可以在_SCREEN之外另外运行一个顶层窗体,是因为vfp运行库对_SCREEN特殊处理(在_SCREEN下的窗体其ShowWindow=0),查看帮助文档ShowWindow的值0和1的区别即知。

构造了一个顶层窗体,在READ EVENTS事务周期内,这个窗体就是模式的,没办法同时响应另外一个顶层窗体。所以,要同时处理两个以上的窗体,应该用FormSet,这是一个大的窗体容器,功能就是容纳多窗体的,正是满足你需要的机制。vfp做FormSet,是因为上述机制而来,它必须这样实现才能达到目的。

FormSet是一个无边界的容器,让你看起来所有窗口都是独立的。

[此贴子已经被作者于2015-12-19 23:22编辑过]


授人以渔,不授人以鱼。
2015-12-19 23:18
快速回复:哈哈,这回是子窗体一闪而过了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042854 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved