Delphi - 如何修复这种奇怪的TGrid行为?

时间:2009-04-17 10:00:28

标签: delphi drag-and-drop vcl delphi-2007

Delphi 2007。

我有一个TGrid,其行数多于屏幕上适合的行数,并且网格的高度使得底部有一个部分绘制的行。 当我点击这个部分行时,它会跳起来完全可见(通过Grids.pas中名为'ClampInView'的过程)。但它并没有停止。由于鼠标现在位于新的部分绘制的行上,因此也会跳起来。

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

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

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

有关如何修复/解决此问题的任何建议吗?

2 个答案:

答案 0 :(得分:3)

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

这不仅会阻止您尝试修复的行为,而且(在我看来)它也会让您的UI看起来更清晰!

答案 1 :(得分:2)

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