Foxtable(狐表)用户栏目专家坐堂 → [求助]如何消除自动调整行高后显示的多余选定区域——已解决


  共有3417人关注过本帖树形打印复制链接

主题:[求助]如何消除自动调整行高后显示的多余选定区域——已解决

帅哥哟,离线,有人找我吗?
shenyl0211
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[求助]如何消除自动调整行高后显示的多余选定区域——已解决  发帖心情 Post By:2019/12/27 17:31:00 [只看该作者]

只需在AfterSelChange事件中加入下列代码,就可以自动调整当前行的行高和原来行的行高,便于查阅字符长度大于单元格宽度的长文本:
If e.OldRange.RowSel <> e.NewRange.RowSel '如果选择的是不同的行
  If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then '而且原来选择的是一个有效的数据行
    Dim size As Integer = e.Table.Font.Size '取得当前表的字体大小
    e.Table.grid.Rows(e.OldRange.RowSel + e.Table.HeaderRows).height = 2 * size + 2 '设置原来行的行高
    e.Table.AutoSizeRow(e.NewRange.RowSel) '自动调整当前行的行高
  End If
End If
存在问题:如果原来行显示的行高大于当前行显示的行高,且当前行在原来行的下方,则执行上述代码后,当前列、当前行下面的几行有时会出现选定区高亮底色(即.SysStyles("Highlight").BackColor = Color.Blue定义的底色),且高亮底色显示的行数多少取决于原来行和当前行显示行高差值。如果差值很大,则当前行可能会超出屏幕上方,用户体验很差。
求助解决办法谢谢!
[此贴子已经被作者于2019/12/28 10:07:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109678 积分:558082 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/27 20:47:00 [只看该作者]

AfterSelChange事件

If e.OldRange.RowSel <> e.NewRange.RowSel '如果选择的是不同的行
    vars("a") = e.OldRange.RowSel
Else
    vars("a") = -1
End If

click事件
If vars("a") <> -1 '如果选择的是不同的行
  If vars("a") >= 0 AndAlso vars("a")< e.Table.Rows.Count Then '而且原来选择的是一个有效的数据行
    Dim size As Integer = e.Table.Font.Size '取得当前表的字体大小
    e.Table.grid.Rows(vars("a")+ e.Table.HeaderRows).height = 2 * size + 2 '设置原来行的行高
    e.Table.AutoSizeRow(e.Row.Index) '自动调整当前行的行高
  End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2019/12/28 10:08:00 [只看该作者]

谢谢蓝版!

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2020/1/14 11:40:00 [只看该作者]

    一点改进——click事件开头增加下列代码,使切换表后的第一次点击(特别是只有单行的情况)有效:
    If vars("a") = -1 AndAlso e.Table.Rows.Count > -1 Then '如果选择的是不同的表
        vars("a") = e.Row.Index
    End If

 回到顶部