在DBGrid上使用Shift + Click和Shift + KeyDown选择多行

时间:2015-10-21 10:25:19

标签: delphi dbgrid

我需要对现有的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执行此操作?

1 个答案:

答案 0 :(得分:1)

您需要在DBGrid中设置几个选项:

  • dgRowSelect = True

  • dgMultiSelect = True

dgRowSelect表示选择整行,而不是单个单元格。对您而言,这可能无关紧要的缺点是失去了在网格中进行就地编辑的能力。

完成这些更改后,您会发现您不需要KeyDown处理程序中的代码。事实上,如果你把它留在里面,你会发现它会跳过其他每一行,所以你最终得到一个斑马条纹网格。

`dgMultiSelect'允许您通过按住Shift键与向下或向上键同时将选择从单行扩展到多行。

但是,您现在说要进行就地编辑,这与将dgRowSelect设置为True不兼容。问题在于,自定义绘制DBGrid的单元格的范围有限,而不会遇到麻烦的批次,ime。但是,以下内容可能适用于您的目的。

在您的网格中,请确保DefaultDrawing设置为True并且网格的Options设置如下:

Options = [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgMultiSelect]

您应该会发现,当您单击一行时,整个行将被“突出显示”,而不仅仅是聚焦的单元格。但是,就地编辑器仍然可以在聚焦单元格上工作,您仍然可以使用Shift +向上或向下将行选择扩展到多行。

使用Shift + Click执行某些操作是错误的。我假设您要将选择从当前行扩展到Shift-Click中的行?我认为你应该发布一个单独的q,因为它是一个不同点。