我需要对现有的DBGrid组件进行代码更改,以便在Shift + Click和Shift + KeyDown上选择行。以下是我到目前为止为KeyDown所做的工作:
if (Key = VK_DOWN) and (ssShift in Shift) then
begin
if not myDataset.Eof then
begin
myDataset.Next;
end;
end;但是上面的代码并没有选择整行。它只会突出显示它下面的单元格。如何修改此代码以选择整行?我怎么也能为Shift+Click这么做呢?
发布于 2015-10-21 11:08:06
您需要在DBGrid中设置几个选项:
dgRowSelect =真dgMultiSelect =真dgRowSelect意味着选择整个行,而不是单个单元格。这样做的缺点可能并不重要,就是失去了在网格中进行就地编辑的能力。
完成这些更改后,您将发现不需要KeyDown处理程序中的代码。事实上,如果你把它放在里面,你会发现它跳过了每一行,所以你最终得到了斑马条纹网格。
“`dgMultiSelect”允许您将select从单个行扩展到多个行,方法是同时按住Shift键和Down或Up键。
但是,您现在说需要就地编辑,这与将dgRowSelect设置为True不兼容。问题在于,自定义绘制DBGrid单元格的范围是有限的,而不会有太多麻烦,ime。然而,以下可能是您的目的可以接受。
在网格中,确保DefaultDrawing设置为True,网格的Options设置如下:
Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgMultiSelect]您应该发现,当您单击一行时,整个行将被绘制为“突出显示”,而不仅仅是焦点单元格。但是,就地编辑器仍然可以在聚焦单元格上工作,并且仍然可以使用Shift + Up或Down将行选择扩展到多个行。
用Shift + Click来做某事是,嗯,更棘手。我假设您希望将所选内容从当前行扩展到所移动的行--单击?我认为你应该发布一个独立的Q关于这一点,因为这是不同的观点。
https://stackoverflow.com/questions/33256865
复制相似问题