以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何消除自动调整行高后显示的多余选定区域——已解决  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=144718)

--  作者:shenyl0211
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间: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
--  发布时间:2019/12/28 10:08:00
--  
谢谢蓝版!
--  作者:shenyl0211
--  发布时间: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