总体思路:模仿例如,在 Windows 桌面上按键盘上的“c”键,直到进入“Chrome”快捷方式。或者在使用列表框时,按所需值的字母而不是滚动整个列表。我希望能够为 DBGrid 执行此操作,因此我可以按一个字母跳转到“名称列”字符串的第一个字符与按下的键匹配的记录。
问问题
1866 次
3 回答
1
这被称为incremental search
Embarcadero CodeCentral 站点中存在如何创建一个示例DBGrid - Incremental search / filter
于 2013-06-06T18:08:02.387 回答
0
重新评论您对 RRUZ 的回答:
我试图让它在没有 TEdit 的情况下工作,并在几个小时后放弃了。不过,我不想让你气馁。我也会对这样的解决方案感兴趣。根据具体的用例,只需将条目捕获到 dbgrid 并将它们传递给不可见的 TEdit,然后触发查找就足够了。(在我的情况下,这还不够。)您可以通过使用以下代码添加 DBGrid1KeyPress 方法来做到这一点:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
msg: TWMKey;
begin
msg.CharCode := Ord(KEY);
PostMessage(Edit1.Handle, WM_CHAR, Ord(key), 0);
end;
您还必须从网格的选项中删除 doEditing,并可能将其切换为 ReadOnly。
于 2013-06-07T08:44:15.540 回答
0
一种不让 TEdit 出现在屏幕上的方法是添加以下事件片段。以下代码将在 RRUZ 之前引用的 Embarcadero CodeCentral 代码之上运行:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key=VK_BACK then
begin
Edit1.Text := copy(Edit1.Text,1,length(Edit1.Text)-1);
end;
end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['a'..'z'] + ['A'..'Z'] then
begin
Edit1.Text := Edit1.Text + Key;
end;
end;
然后,您可以将编辑框设置为不可见。您所需要的只是专注于列表并按下按键。
于 2014-01-21T08:42:57.373 回答