4

德尔福 2007。

我有一个 TGrid 的行数超过了屏幕上的容量,并且网格的高度使得底部有一个部分绘制的行。当我单击这部分行时,它会跳起来完全可见(通过 Grids.pas 中名为“ClampInView”的过程)。但它并没有停止。由于鼠标现在位于一个新的部分绘制的行上,所以它也会跳起来。

最终效果是单击部分绘制的行开始选择垂直列中的单元格,一直旋转到底部(或直到您释放鼠标)。

我已经在一个新的 winforms 项目上复制了这个,只有一个 100 行的网格,没有代码,所以我很确定这不是我在代码中做错的事情。

这对我来说很糟糕,因为我在实际代码中的表单具有拖放类型的行为,因此在部分行上单击并释放 ~0.1 秒后将拾取单元格中的项目并将其放下约 50 行。当您单击一个单元格时,这绝对不是您所期望的。

有什么建议可以解决/解决这个问题吗?

4

2 回答 2

3

这就是我一直在做的事情,因为我认为部分可见的行很俗气。我调整了网格的大小,使其客户区是行高的偶数倍。您可以在设计时执行此操作,或者也可以通过代码轻松执行此操作。如果您有可重新调整大小的行,那么踢球者将是。如果是这种情况,那么只需将用于调整网格大小的代码放在行调整大小事件的事件处理程序中(我相信它有一个)。

这不仅可以防止您尝试修复的行为,而且(在我看来)还可以使您的 UI 看起来更干净!

于 2009-04-17T16:40:31.960 回答
2

如果用户在“坏”位置单击,您可以尝试在网格中覆盖 MouseDown,并且不要调用继承的 MouseDown。

于 2009-04-17T10:46:13.293 回答