Visual FoxPro 9 ListBox控件无法显示数组数据问题求助
ListBox无法显示数组数据的问题修复
问题描述
需要将变量cListData接收的游标结果显示在ListBox控件中,为支持超过255字符的显示,设置了RowSourceType = 5(数组)、RowSource = "aListData"。调试确认aListData数组已正确加载元素,但ListBox始终无文本显示。
相关代码:
LPARAMETERS cListData * 获取SQL前缀信息 LOCAL cPrefix cPrefix = SQLMessage(81664) * 调试显示前缀内容 MESSAGEBOX("Prefix: " + cPrefix) * 创建并填充带前缀的数组 LOCAL aListData[1] LOCAL nLines * 将数据分割为独立元素 nLines = ALINES(aListData, cListData, ",") DIMENSION aListData[nLines + 1] * 仅在数组第一个元素添加前缀 aListData[1] = cPrefix * 初始化临时数组存储分割后的行 LOCAL tempListData[1] DIMENSION tempListData[nLines] * 将元素存入临时数组 FOR i = 1 TO nLines tempListData[i] = ALLTRIM(aListData[i]) NEXT * 将临时数组元素放回aListData,从第二个索引开始 FOR i = 1 TO nLines aListData[i + 1] = tempListData[i] NEXT * 调试显示aListData内容 FOR i = 1 TO ALEN(aListData) MESSAGEBOX("aListData[" + TRANSFORM(i) + "]: " + aListData[i]) NEXT * 设置ListBox使用数组作为数据源 ThisForm.List.RowSourceType = 5 && 数组类型 ThisForm.List.RowSource = "aListData" && 数组名加引号 * 清空表单Tag(可选) ThisForm.Tag = ""
问题截图:
核心问题与修复方案
核心问题
aListData是局部变量(LOCAL),方法执行完毕后局部变量会被自动释放,ListBox后续无法访问到该数组,导致无数据显示。此外原代码中ALINES的参数使用有误,分割逻辑存在冗余。
修复步骤
- 将数组改为表单级变量:确保方法执行后数组依然存在,ListBox可持续访问。
- 修正ALINES参数:正确指定分隔符位置,避免分割错误。
- 简化数组操作逻辑:移除冗余的临时数组,优化元素后移的循环方式。
- 强制ListBox刷新:添加
Requery()方法确保控件重新读取数据源。
修正后的代码
LPARAMETERS cListData * 获取前缀信息 LOCAL cPrefix cPrefix = SQLMessage(81664) * 分割数据到表单级数组,逗号作为分隔符 LOCAL nLines nLines = ALINES(ThisForm.aListData, cListData, .F., ",") * 调整数组大小,插入前缀作为第一个元素 DIMENSION ThisForm.aListData[nLines + 1] * 从后往前循环,避免元素覆盖 FOR i = nLines DOWNTO 1 ThisForm.aListData[i + 1] = ALLTRIM(ThisForm.aListData[i]) NEXT * 设置前缀到第一个位置 ThisForm.aListData[1] = cPrefix * 配置ListBox并强制刷新 ThisForm.List.RowSourceType = 5 ThisForm.List.RowSource = "ThisForm.aListData" ThisForm.List.Requery() ThisForm.Tag = ""
内容的提问来源于stack exchange,提问作者Dan Tag
相关产品推荐
相关产品推荐

