【发布时间】:2008-12-02 21:29:04
【问题描述】:
我在表单上有一个 DBGrid。 DBGrid 有很多列,因此会显示一个水平滚动条。我向右滚动 DBGrid 视图以查看更多列。如果我选择一行,DBGrid 视图会自动重置以查看第一列(就像我滚动回最左边的位置一样)。
有没有办法防止这种情况发生?
【问题讨论】:
我在表单上有一个 DBGrid。 DBGrid 有很多列,因此会显示一个水平滚动条。我向右滚动 DBGrid 视图以查看更多列。如果我选择一行,DBGrid 视图会自动重置以查看第一列(就像我滚动回最左边的位置一样)。
有没有办法防止这种情况发生?
【问题讨论】:
我假设您在网格选项中有 goRowSelect。这会强制选定的列成为第一个非固定列,因此每当行更改代码以将选定单元格滚动到视图中时,都会强制第一个非固定列可见。
由于 goRowSelect 也有效地禁用了使用键盘的水平滚动,因此我尝试在没有它的情况下生活。您可以使用网格单元格的自定义绘图来显示当前行的所有单元格,并为选定的单元格显示正确的颜色,即使只有一个单元格被真正选中。我也使用它来根据网格是否聚焦来显示不同的颜色,类似于标准树控件的作用。但是,要使其正常工作,您不仅需要处理网格单元格导航事件,还需要处理一些其他事件,例如网格的 OnEnter 和 OnExit,OnActivate 和 OnDeactivate 的应用程序,等等。
【讨论】:
你也许可以询问滚动条的位置
GetScrollInfo(Self.Handle, SB_VERT, SIOld);
并使用SetScrollInfo( ) 将其放回原处。可能有更好的方法。 SelectedField 是另一种方式(根据需要获取/设置)。
【讨论】: