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, 2, 1)
.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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。