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


我知道你们说的问题是怎样的了,这是解决了的图片,下面是相关代码,你猜猜是在什么地方解决的:

程序代码:
Form1 = NEWOBJECT("C_Form")
Form1.Show
READ EVENTS
RETURN 

DEFINE CLASS C_Form AS Form
    Caption = "改变Grid标题栏的颜色"
    ShowTips = .T.
   
    ADD OBJECT Grid1 AS Grid WITH Top = 20, Left = 20
    ADD OBJECT Container1 AS Container WITH Top = 10, Left = 200, Width = 100, Height = 100, SpecialEffect = 0, BackColor = RGB(128,128,0)
   
    PROCEDURE Grid1.Init
        USE Unicode_GBK ALIAS test EXCLUSIVE IN 0
        WITH This
            .RecordSourceType = 1
            .RecordSource = "test"
            .Themes = .F.
            LOCAL lnIndex
            FOR lnIndex = 1 TO .ColumnCount
                WITH .Columns(lnIndex).Header1
                    .BackColor = RGB(0,0, 255)
                    .ForeColor = RGB(255,255,255)
                ENDWITH
            NEXT
        ENDWITH
    ENDPROC
   
    PROCEDURE Grid1.AfterRowColChange(tnColumn)
        This.ZOrder(1)         && 关键部位在这里!
    ENDPROC
   
    PROCEDURE Grid1.Show
        This.Visible = .T.
    ENDPROC
   
    PROCEDURE Grid1.Hide
        This.Visible = .F.
    ENDPROC
   
    PROCEDURE Grid1.Destroy
        USE IN test
    ENDPROC 

    PROCEDURE Container1.Init
        WITH This
            .AddObject("Text1", "TextBox")
            .Text1.Top = 5
            .Text1.Value = "点我显示表格"
            BINDEVENT(.Text1, "GotFocus", ThisForm.Grid1, "Show")
            .AddObject("Text2", "TextBox")
            .Text2.Top = 40
            .Text2.Value = "点我隐藏表格"
            BINDEVENT(.Text2, "GotFocus", ThisForm.Grid1, "Hide")
            .SetAll("Left", 5, "TextBox")
            .SetAll("Height", 25, "TextBox")
            .SetAll("Width", 80, "TextBox")
            .SetAll("Visible", .T., "TextBox")
        ENDWITH
    ENDPROC
   
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
   
ENDDEFINE


[ 本帖最后由 TonyDeng 于 2012-6-2 00:17 编辑 ]

授人以渔,不授人以鱼。
2012-06-02 00:13
arefeng
Rank: 2
等 级:论坛游民
帖 子:69
专家分:61
注 册:2012-5-30
收藏
得分:0 
他只会用代码,从不用表单设计器生成。
VFP9的设计器已经足够强大, 不会制约到编程需要了哇,
某些情况下不如直接写代码快,
但大多数情况下肯定能省不少时间.
不知道tony弄这段代码要多长时间,
同样功能的表单(除了那个Container,在设计器中我没法使用它)
用设计器不到2分钟就搞完了,
写代码的话, 怎么也得5分钟吧.
2012-06-02 00:24
arefeng
Rank: 2
等 级:论坛游民
帖 子:69
专家分:61
注 册:2012-5-30
收藏
得分:0 
回复 21楼 TonyDeng
好办法, 赞一个
2012-06-02 00:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Grid的这个现象其实不能算是bug。因为Grid需要应付表格内容左右移动的需要,而且每一列的数据都可能是千变万化的,因此它不可能不连标题栏和内容一起刷新,而刷新的时候不可能考虑在它上面叠加了多少控件,故只能是刷新画面了事。标题Header控件的确是有点特殊,它是Windows Form的一种Form对象,属于系统级别的(这从要令它变色都那么艰难就看到了),VFP处理Grid Header的刷新,不能像别的控件那样在背景后面刷新,所以恰好覆盖了标题栏那部分。解决的办法,是强制令Grid控件(其实是Windows窗体)在对象层的最底部,不管刷新破坏成怎样,稳定下来后,要求Windows自己把所有控件的层次按顺序搞清楚,那样就能恢复原样。

[ 本帖最后由 TonyDeng 于 2012-6-2 00:35 编辑 ]

授人以渔,不授人以鱼。
2012-06-02 00:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 22楼 arefeng
用代码写的灵活性和精准性是设计器无法比拟的,在调试程序时尤其有优势,因为程序到底干了什么,一目了然。

授人以渔,不授人以鱼。
2012-06-02 00:34
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 21楼 TonyDeng
劳驾你把这行代码USE Unicode_GBK ALIAS test EXCLUSIVE IN 0 换成 CREATE CURSOR ......
否则看不到你的效果,就在上面的代码里加上吧。

坚守VFP最后的阵地
2012-06-02 00:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用sdta在2012-6-2 00:34:32的发言:

劳驾你把这行代码USE Unicode_GBK ALIAS test EXCLUSIVE IN 0 换成 CREATE CURSOR ......
否则看不到你的效果,就在上面的代码里加上吧。

你随便改成自己机器上有的自由表嘛。

授人以渔,不授人以鱼。
2012-06-02 00:35
arefeng
Rank: 2
等 级:论坛游民
帖 子:69
专家分:61
注 册:2012-5-30
收藏
得分:0 
回复 21楼 TonyDeng
    PROCEDURE Grid1.AfterRowColChange(tnColumn)
        This.ZOrder(1)         && 关键部位在这里!
    ENDPROC
在表单设计器中,选择试验对象的表格Grid控件,在方法程序中选择AfterRowColChange事件
加入:

This.Zorder(1)

这应该跟你的代码功能是一样的吧?我不太确定是因为你引用了  tnColumn
然后我的表单运行后还是不行,
你的表单因为有打开表的操作,我刚才试得不顺手
现在弄好了,同样也不行,
你点"点我显示表格"后接着点表格的header就全完了.....
2012-06-02 00:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
兔子妹妹给我看那个程序,表单上20行一模一样的控件序列,居然是在设计器上一个一个摆出来的,看得我冷汗直冒。

授人以渔,不授人以鱼。
2012-06-02 00:43
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 29楼 TonyDeng
什么时候的事情

坚守VFP最后的阵地
2012-06-02 00:46
快速回复:请教GRID标题遮挡其他控件的问题
数据加载中...
 
   



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

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