VFP9中希望在Grid表格控件的每列标题下增加一行文本框用于各列相关数据的统计,相面的代码究竟错在哪里?
*--- 动态创建统计文本框(添加到表单,非 Grid 内) ---*LOCAL lnLeft, lnTop, lnHeight,lnColWidth, j, lcStatName, loTextBox
lnTop = 10 && 统计行距表单顶部的位置
lnLeft = THISFORM.grdMyGrid.Left && 初始 Left 与 Grid 左对齐
FOR j = 1 TO THISFORM.grdMyGrid.ColumnCount
lcStatName = "txtStat" + ALLTRIM(STR(j)) &&生成文本控件唯一名称
* 移除已存在的同名控件(避免冲突)
IF PEMSTATUS(THISFORM.grdMyGrid.Columns[j], lcStatName, 5)
THISFORM.grdMyGrid.Columns[j].RemoveObject(lcStatName)
ENDIF
* 在列中动态添加文本框
THISFORM.grdMyGrid.Columns[j].AddObject(lcStatName, "TextBox")
loTextBox = THISFORM.grdMyGrid.Columns[j].&lcStatName
*.THISFORM.grdMyGrid.Columns[j].Sparse = .F. &&强制所有单元格显示此控件
IF TYPE("loTextBox") != "O" OR ISNULL(loTextBox)
MESSAGEBOX("创建文本框 " + lcStatName + " 失败!")
LOOP && 跳过当前循环
ENDIF
* 显式引用 Grid 列的宽度
lnColWidth = THISFORM.grdMyGrid.Width && 获取 Grid 列宽
lnHeight = THISFORM.grdMyGrid.Height && 获取 Grid 高度
* 设置文本框属性(独立 WITH 块)
WITH loTextBox
.Visible = .T. && 默认可见
.Width = .Parent.Width && 继承列宽
.Height = 20 && 高度
.Top = 20 && 在列标题上方显示(负值向上偏移)
.Alignment = 2 && 居中
.FontSize = 12 && 字体大小
.BackColor = RGB(240, 240, 240) && 浅灰色背景
.BorderStyle = 1 && 单线边框
.ReadOnly = .T. && 禁止编辑
IF laFields[j,2]="N" &&关键:无需禁用数据绑定(即:无需通过设置 ControlSource=""解绑)
.Value = 0
ENDIF
ENDWITH
* 更新下一个文本框的 Left 位置
lnLeft = lnLeft + lnColWidth
ENDFOR
* 刷新表单
THISFORM.Refresh()