| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2280 人关注过本帖
标题:我又迷糊了!
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2015-12-08 11:47
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 8楼 吹水佬
我在main.prg里  声明一个公共类  里面有clear events

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-08 12:07
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 5楼 TonyDeng
先是登录验证窗口,如果密码输入对了,就进入主程序窗口

我感觉没反呀

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-08 12:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用不懂才问在2015-12-8 12:15:34的发言:

先是登录验证窗口,如果密码输入对了,就进入主程序窗口

我感觉没反呀


你是在登陆窗体内部启动主窗口,此时登陆窗体本身未关闭,到你发出CLEAR EVENTS的时候,关掉的是后来打开的窗体的EVENTS,不是前面的。

授人以渔,不授人以鱼。
2015-12-08 12:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你有两种解决办法:
1.启动主窗口(ShowWindow=2),在里面调用登陆窗口(WindowType=1),关闭登陆窗口,自然回到主窗口。
2.在主程序中启动登陆窗口,关闭后回到主程序再后续启动主窗口。

授人以渔,不授人以鱼。
2015-12-08 12:24
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
用表单设计器画程序    和用代码写程序    思路完全很不同啊  …………

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-08 12:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
逻辑不清,用表单设计器做,也一样会出现这种问题啊。

授人以渔,不授人以鱼。
2015-12-08 12:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:90 
程序代码:
*-----------------------
* 多窗体示例
* [color=#800000]2015.12.08.[/color]
*-----------------------

SET PATH TO "..\MyTools"
SET PROCEDURE TO "MyForm"
oMainForm = CREATEOBJECT("C_MainForm")
oMainForm.Show
READ EVENTS
RETURN 

DEFINE CLASS C_MainForm AS MyForm
    Caption = "主窗体"
    ShowWindow = 2
    Width = 600
    Height = 400
    AutoCenter = .T.
    
    ADD OBJECT cmdLogin AS CommandButton WITH Caption = "登录", Width = 100, Height = 25
    
    PROCEDURE Arrange
        WITH This.cmdLogin
            .Top = (This.Height - .Height) / 2
            .Left = (This.Width - .Width) / 2
        ENDWITH 
    ENDPROC 
    
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC 
    
    PROCEDURE cmdLogin.Click
        LOCAL loLogin
        loLogin = CREATEOBJECT("C_Login")
        loLogin.Show
    ENDPROC 
    
ENDDEFINE 

DEFINE CLASS C_Login AS MyForm
    Caption = "登陆"
    ShowWindow = 1
    WindowType = 1
    Width = 300
    Height = 200
    AutoCenter = .T.
    
    PROCEDURE Destroy
        * 重写Destroy否决父类中默認CLEAR EVENTS的动作
    ENDPROC 
    
ENDDEFINE 


MyForm.PRG
程序代码:
DEFINE CLASS MyForm AS Form

    PROCEDURE Arrange
        FOR EACH obj IN This.Controls FOXOBJECT 
            IF (VARTYPE(obj.CanArrange) == "L") .AND. obj.CanArrange
                obj.Arrange
            ENDIF 
        NEXT 
    ENDPROC 

    PROCEDURE Activate
        This.Arrange
    ENDPROC 
    
    PROCEDURE Resize
        This.Arrange
    ENDPROC 
    
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC 
    
ENDDEFINE 


[此贴子已经被作者于2015-12-8 13:03编辑过]


授人以渔,不授人以鱼。
2015-12-08 12:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你看懂18楼的代码逻辑,就明白15楼所说两种解决办法是很容易实现的,代码变动不大,都是可重用的。主窗体中的那么按钮,其实可用菜单,无论怎么用,类中的代码,都不需多少变动。其实按我的习惯,登录部分不用窗口,直接在主窗口中用Container动态显示登录画面,完后消隐该Container即可,根本不需要多窗口。

授人以渔,不授人以鱼。
2015-12-08 13:27
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:0 
回复 18楼 TonyDeng
谢谢你的提示   在你的基础上改了一下 

程序代码:
SET PATH TO "..\MyTools"
SET PROCEDURE TO "MyForm"
oMainForm = CREATEOBJECT("C_MainForm")
oMainForm.startLoginForm
READ EVENTS
RETURN 

DEFINE CLASS C_MainForm AS MyForm
    Caption = "主窗体"
    ShowWindow = 2
    Width = 600
    Height = 400
    AutoCenter = .T.
    
    ADD OBJECT cmdLogin AS CommandButton WITH Caption = "登录", Width = 100, Height = 25
    
    PROCEDURE Arrange
        WITH This.cmdLogin
            .Top = (This.Height - .Height) / 2
            .Left = (This.Width - .Width) / 2
        ENDWITH 
    ENDPROC 
    
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC 
    
    PROCEDURE startLoginForm
        LOCAL loLogin
        loLogin = CREATEOBJECT("C_Login")
        loLogin.show 
    ENDPROC 
    
ENDDEFINE 

DEFINE CLASS C_Login AS MyForm
    Caption = "登陆"
    ShowWindow = 1
    WindowType = 1
    Width = 300
    Height = 200
    AutoCenter = .T.
    
    PROCEDURE Destroy
        oMainForm.show 
        * 重写Destroy否决父类中默認CLEAR EVENTS的动作
    ENDPROC 
    
ENDDEFINE 

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-12-08 13:29
快速回复:我又迷糊了!
数据加载中...
 
   



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

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