奇怪的下标越界

zjh96042 2007-02-07 11:01:47
我采用以下语句调整datagrid1的每列的列宽,在其他页面中很好用,但在这个页面的Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)事件中(其他页面的这个事件调整正常),调整就出现下标越界。
DataGrid1.Columns(0).Width = 500
DataGrid1.Columns(1).Width = 700
DataGrid1.Columns(2).Width = 500
DataGrid1.Columns(3).Width = 500
DataGrid1.Columns(4).Width = 1100
DataGrid1.Columns(5).Width = 1100
DataGrid1.Columns(6).Width = 800
DataGrid1.Columns(7).Width = 900
DataGrid1.Columns(8).Width = 1500
DataGrid1.Columns(9).Width = 800
DataGrid1.Columns(10).Width = 1100
DataGrid1.Columns(11).Width = 1200
DataGrid1.Columns(12).Width = 800
DataGrid1.Columns(13).Width = 800
DataGrid1.Columns(14).Width = 1500
DataGrid1.Columns(15).Width = 800
DataGrid1.Columns(16).Width = 500

到了DataGrid1.Columns(2).Width = 500就提示下标越界,如果删除这句以及下面的调整宽度的语句,程序可以运行起来,datagrid1的1、2列宽调整正常,但3~17列根本不可用,根本点不中,而这些列的数据都在,就是不可点中,难怪也就越界了。奇怪得很,请各位大虾指点指点吧。
...全文
776 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊呀 2007-02-26
  • 打赏
  • 举报
回复
问题可能出在“设计时”的设置上,你看看控件的属性里边是不是不一样?
zdingyun 2007-02-22
  • 打赏
  • 举报
回复
用代码解决动态增加列数
Dim i As Integer
Dim c As Column
For i = 1 To 14
Set c = DataGrid1.Columns.Add(DataGrid1.Columns.Count)
Next
With c
.Visible = True
.Width = 1000
.Alignment = dbgRight
End With
DataGrid1.Columns(0).Width = 500
DataGrid1.Columns(1).Width = 700
DataGrid1.Columns(2).Width = 500
DataGrid1.Columns(3).Width = 500
DataGrid1.Columns(4).Width = 1100
DataGrid1.Columns(5).Width = 1100
DataGrid1.Columns(6).Width = 800
DataGrid1.Columns(7).Width = 900
DataGrid1.Columns(8).Width = 1500
DataGrid1.Columns(9).Width = 800
DataGrid1.Columns(10).Width = 1100
DataGrid1.Columns(11).Width = 1200
DataGrid1.Columns(12).Width = 800
DataGrid1.Columns(13).Width = 800
DataGrid1.Columns(14).Width = 1500
DataGrid1.Columns(15).Width = 800
DataGrid1.Columns(16).Width = 500
zdingyun 2007-02-18
  • 打赏
  • 举报
回复
仔细研究你的情况,你是加载了一个缺省的DataGrid控件,设计阶段,DataGrid控件界面仅有2列,你需用鼠标右键点该控件,选编辑,然后鼠标右键点该控件,选追加(你需显示数据表的字段数-2)次,或按你17列-2次(即15次).此时DataGrid控件界面有17列与你代码中所调整列一致,就不会出现下标越界现象.
L-星星火 2007-02-08
  • 打赏
  • 举报
回复
嗯,数据加载完成前,你想这样设置,要先定义列总数 .Cols = 17,哈哈,要不,你在Columns(2)前加上一句Msgbox .Cols 看看
warlord 2007-02-08
  • 打赏
  • 举报
回复
在控件上右键点击"清除字段"试试.
xiangfly 2007-02-08
  • 打赏
  • 举报
回复
不明白LZ这样写的目的是什么,
如果想保存列宽,怎么不写到注册列表里去
chljapan 2007-02-07
  • 打赏
  • 举报
回复
同意楼上说的,各个页面中的属性设置可能不一样!!
zjh96042 2007-02-07
  • 打赏
  • 举报
回复
这个datagrid在sstab选项卡中,设置应该没有问题啊,datagrid是在其他页面运行正常后拷贝过来的。
zyg0 2007-02-07
  • 打赏
  • 举报
回复
你的设置的问题 控件的设置
zjh96042 2007-02-07
  • 打赏
  • 举报
回复
谢谢,但为什么程序运行起来后记录的第3到第17列不能点中呢?
zyg0 2007-02-07
  • 打赏
  • 举报
回复
if DataGrid1.Columns.count>16 then
DataGrid1.Columns(0).Width = 500
DataGrid1.Columns(1).Width = 700
DataGrid1.Columns(2).Width = 500
DataGrid1.Columns(3).Width = 500
DataGrid1.Columns(4).Width = 1100
DataGrid1.Columns(5).Width = 1100
DataGrid1.Columns(6).Width = 800
DataGrid1.Columns(7).Width = 900
DataGrid1.Columns(8).Width = 1500
DataGrid1.Columns(9).Width = 800
DataGrid1.Columns(10).Width = 1100
DataGrid1.Columns(11).Width = 1200
DataGrid1.Columns(12).Width = 800
DataGrid1.Columns(13).Width = 800
DataGrid1.Columns(14).Width = 1500
DataGrid1.Columns(15).Width = 800
DataGrid1.Columns(16).Width = 500
end if
zjh96042 2007-02-07
  • 打赏
  • 举报
回复
问题是 如果删除
DataGrid1.Columns(2).Width = 500
DataGrid1.Columns(3).Width = 500
DataGrid1.Columns(4).Width = 1100
DataGrid1.Columns(5).Width = 1100
DataGrid1.Columns(6).Width = 800
DataGrid1.Columns(7).Width = 900
DataGrid1.Columns(8).Width = 1500
DataGrid1.Columns(9).Width = 800
DataGrid1.Columns(10).Width = 1100
DataGrid1.Columns(11).Width = 1200
DataGrid1.Columns(12).Width = 800
DataGrid1.Columns(13).Width = 800
DataGrid1.Columns(14).Width = 1500
DataGrid1.Columns(15).Width = 800
DataGrid1.Columns(16).Width = 500
等调整宽度的语句,程序可以运行起来,datagrid1的1、2列宽调整正常,也可点击;3~17列数据都在,但根本不可用,根本点不中。
zyg0 2007-02-07
  • 打赏
  • 举报
回复
因为你数据没有加载的时候会调用这个事件 DataGrid1.Columns(2)还没有
建议写成方法 在数据加载完后调用

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧