Delphi - 我该如何修复这个奇怪的TGrid行为?

4

Delphi 2007.

我有一个TGrid,行数超过屏幕可显示的范围,而且网格的高度使得底部有一行被部分绘制。当我点击这个部分绘制的行时,它会通过Grids.pas中的“ClampInView”过程跳到完全可见状态。但是它并没有停止。由于鼠标现在位于新的部分绘制的行上,那一行也会跳起来。

最终效果是,点击部分绘制的行会开始选择垂直列中的单元格,并一直旋转到底部(或者直到你松开鼠标)。

我在一个新的winforms项目中复制了这个问题,只有一个带有100行的网格和没有代码,因此我非常确定这不是我在代码方面做错了什么。

这对我很糟糕,因为我在真实代码中的表单具有拖放类型的行为,因此点击并在大约0.1秒后释放部分绘制的行将选取单元格中的项目并将其放置在下面约50行。这绝对不是你点击单元格时期望发生的事情。

有什么建议如何修复/解决这个问题吗?

2个回答

3
这是我一直以来的做法,因为我认为部分可见的行很俗气。我会调整网格的大小,使其客户区域是行高的整数倍。你可以在设计时进行调整,也可以通过代码轻松实现。如果你有可调整大小的行,那么只需将调整网格大小的代码放在行调整大小事件的事件处理程序中(我相信它有一个)。这不仅可以避免你试图修复的行为,而且(在我看来)也使你的UI看起来更加清洁!

2

如果用户在“错误”的位置单击,则可以尝试重写网格中的MouseDown并不调用继承的MouseDown。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接