注册 登录
编程论坛 VFP论坛

隐藏Grid某列后,左右拉动滚动条后,表格列显示位置乱套,如何解决?

asis 发布于 2023-07-30 18:27, 1220 次点击
我想实现Grid某列不显示和自定义列宽,我把各列宽度值事先存放到一个表中,进入表单时会按指定的列宽度重新更新Grid,其中列宽是0时隐藏此列不显示:
USE gyshunxubj.DBF ALIAS gyshunxubj IN 0
sele gyshunxubj
scan
H6=TRIM(列序号)
IF 改后宽度1>0
thisform.grid1.column&H6..width=改后宽度1
ELSE  &&如果改后宽度1是0就隐藏此列不显示:
thisform.grid1.column&H6..Visible=.F.
endif
endscan

[问题]:以上语句虽然可以隐藏某列,但是一旦拉动表格的左右滚动条浏览表格数据时,表格的数据就会出现各列数据串位混乱现象,如下图所示:
1.没左右拉动滚动条前显示界面:
只有本站会员才能查看附件,请 登录

2.拉动左右滚动条后显示各列位置混乱的界面:
只有本站会员才能查看附件,请 登录


不知道有没有好的解决办法?谢谢!





11 回复
#2
吹水佬2023-07-30 18:53
给测试代码
#3
laowan0012023-07-30 20:08
改变列的visible属性吧
#4
asis2023-07-30 21:54
只有本站会员才能查看附件,请 登录

这是测试用的表单,只要单击隐藏按钮,隐藏第1列序号后,再左右拉动表格滚动条并单击表格后,各列的竖线就错位。不知道是VFP自身的BUG还是我哪个地方设置的不对,敬请指教,谢谢。
#5
吹水佬2023-07-30 23:31
好像是有点问题,Visible=.f. 只是不显示内容,并不等于他消失。
要动态最好重新定义列的内容
#6
dglhz2023-07-31 01:41
第一次运行时确实有错乱现像
在设计环境设置grid的 SplitBar = .F.后 没出现错乱
但奇怪的是
再将SplitBar = .T. 后也没错乱了.
#7
吹水佬2023-07-31 08:52
grid有个特性:获得焦点时会刷新数据。
这样试试或者可以:
1、设置grid.Column的Visible后执行grid.SetFocus
2、在grid.Scrolled事件中执行grid.SetFocus
#8
asis2023-07-31 08:57
尝试在隐藏第1列的语句后面重新定义了表格各列的宽度后,问题依然存在。想让表格某列隐藏本来是一个常规操作,但确有严重问题。
只能把需要隐藏列的宽度设置0,这样不存上述问题,只是隐藏列右侧有一条很粗的竖线,不美观,目前没有什么解决方案。
#9
asis2023-07-31 09:12
在grid.Scrolled事件加一条:this.SetFocus,解决了此问题。感谢吹版!果然出手不凡。
#10
z126892023-07-31 10:07
谢谢各位,跟着学习
#11
kangss2023-07-31 11:59
回复 楼主 asis
这个情况一直都有。在Scrolled事件中加:

IF nDirection=4 OR nDirection=5
    THIS.REFRESH
ENDIF
#12
sostemp2023-07-31 14:02
以下是引用kangss在2023-7-31 11:59:16的发言:

这个情况一直都有。在Scrolled事件中加:

IF nDirection=4 OR nDirection=5
    THIS.REFRESH
ENDIF


Win7_X64,VFP9.7423,楼主所说Bug没有复现,运行楼主示例后,拖动后正常啊。
1