打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Grid中嵌入CommandButton的自定义控件
userphoto

2016.03.30

关注
程序代码:
CLEAR ALL
CLOSE DATABASES ALL
SET DEFAULT TO (Application.ActiveProject.HomeDir)
Form1 = NEWOBJECT("C_Form")        && 从类定义中C_Form中生成窗体
Form1.Show                         && 显示刚才生成的窗体
READ EVENTS                        && 激活交互事件
CLOSE DATABASES ALL
CLEAR ALL
RETURN                             && 程序结束

*-----------------------------
* 程序运行窗体的类定义
*-----------------------------
DEFINE CLASS C_Form AS Form
    Caption = "自定义按钮测试"     && 窗体标题
    WindowState = 2                && 启动时最大化
   
    ADD OBJECT Grid1 AS Grid       && 在窗体中放置一个Grid
   
    *-------------------------
    * 窗体载入内存时打开相关的数据表
    *-------------------------
    PROCEDURE Load
        USE Table1 IN 0
    ENDPROC
   
    *-------------------------
    * 窗体从内存中卸载时关闭已打开的数据表
    *-------------------------
    PROCEDURE Unload
        USE IN Table1
    ENDPROC
   
    *-------------------------
    * 自定义对窗体的控件进行布局的方法
    *-------------------------
    PROCEDURE Arrange
        WITH This.Grid1
            .Top = 5
            .Left = 5
            .Width = ThisForm.Width - .Left - 5
            .Height = ThisForm.Height - .Top - 5
        ENDWITH
    ENDPROC
   
    *-------------------------
    * 窗体激活或获得焦点时
    *-------------------------
    PROCEDURE Activate
        ThisForm.Arrange
    ENDPROC
   
    *-------------------------
    * 窗体改变大小时
    *-------------------------
    PROCEDURE Resize
        ThisForm.Arrange
    ENDPROC
   
    *-------------------------
    * 关闭窗体时释放交互事务
    *-------------------------
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
   
    *-------------------------
    * 表格的初始化
    *-------------------------
    PROCEDURE Grid1.Init
        WITH This
            .RecordSourceType = 1                               && 数据源为表别名
            .RecordSource = "Table1"                            && 绑定数据源
            WITH .Columns(3)                                    && 对具体数据表中的某列细化
                .RemoveObject("Text1")                          && 移除该栏中内置的TextBox控件
                .AddObject("Button1", "GridCommandButton")      && 新增自定义控件
                WITH .Button1
                    .ControlSource = "Table1.F03"               && 绑定本栏的数据源
                    .TrueCaption = "Yes"                        && 修改预定义的文字
                    .FalseCaption = "No"                        && 修改预定义的文字
                    .Width = 60                                 && 设置控件宽度
                    .Height = 20                                && 设置控件高度
                    .Visible = .T.                              && 让控件可见
                ENDWITH
                .CurrentControl = "Button1"                     && 设定本栏的控制控件
                .Sparse = .F.                                   && 每次Refresh时Grid所有行中本栏的数据均刷新
                .Width = 60                                     && 本栏的宽度与新控件匹配
            ENDWITH
            .RowHeight = 22                                     && 表格行的高度与新控件匹配
        ENDWITH
    ENDPROC
   
ENDDEFINE 

*-----------------------------
* 功能:嵌入Grid中的CommandButton,可与逻辑型数据绑定
* 机制:从Container中继承,构造一个包含隐藏TextBox和呈现CommandButton的
*       自定义控件。TextBox与平常Grid Cell的一样绑定数据,把需要提供的
*       数据转交给CommandButton,以便呈现。
* 注意:数据绑定源须为逻辑型,否则失效或出错。
*-----------------------------
DEFINE CLASS GridCommandButton AS Container
    BorderWidth = 0           && 取消容器的边框线

    *-------------------------
    * 自定义属性
    ControlSource = ""        && 数据绑定源
    TrueCaption = "是"        && 当数据值为.T.时CommandButton的文字
    FalseCaption = "否"       && 当数据值为.F.时CommandButton的文字
    *-------------------------
   
    *-------------------------
    * 内部受保护控件
    *-------------------------
    ADD OBJECT PROTECTED Text1 AS TextBox WITH Visible = .F.
    ADD OBJECT PROTECTED Button1 AS CommandButton
   
    PROCEDURE Width_Assign(tAssign)
        This.Button1.Width = tAssign
    ENDPROC
   
    PROCEDURE Height_Assign(tAssign)
        This.Button1.Height = tAssign
    ENDPROC
   
    PROCEDURE ControlSource_Assign(tAssign)
        WITH This.Text1
            .ControlSource = tAssign
            .Value = EVALUATE(tAssign)
        ENDWITH
    ENDPROC
   
    PROCEDURE Text1.Value_Assign(tAssign)
        This.Value = tAssign
        WITH This.Parent.Button1
            .VisualEffect = IIF(tAssign, 21)
            .Caption = IIF(This.Parent.Text1.Value, This.Parent.TrueCaption, This.Parent.FalseCaption)
        ENDWITH
    ENDPROC
   
    *-------------------------
    * 点击按钮时翻转值的真假
    *-------------------------
    PROCEDURE Button1.Click
        WITH This.Parent.Text1
            .Value = !.Value
        ENDWITH
    ENDPROC
   
ENDDEFINE 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vfp9.0通过WebBrowser控件获取QQ新闻标题及链接
EXCEL VBA登录窗体设计
vfp对GRID的增强
Adding Checkbox to Grid header #VFP
VBA中的控件数组
【引用】[VBA] vba控件常规使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服