注册 登录
编程论坛 VFP论坛

VFP9中希望在Grid表格控件的每列标题下增加一行文本框用于各列相关数据的统计,相面的代码究竟错在哪里?

ynchunge 发布于 2025-05-28 14:07, 242 次点击
*--- 动态创建统计文本框(添加到表单,非 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()
3 回复
#2
shizi02025-05-28 15:59
这个是在每列中新增一个TextBox吧,跟原始text1并列,但不会显式表现出来,看列属性Currentcontrol指向谁就显示谁。
好像与“在Grid表格控件的每列标题下增加一行文本框用于各列相关数据的统计”无关。
#3
hsfisher2025-05-29 08:30
种个草
#4
wcx_cc2025-05-29 23:59
不需要每列的 Currentcontrol='TextBox1'吗?
1