简单问题,立即结贴:按方向键填充DBGRID

knife_s 2008-12-01 02:47:06
以前写过这个功能,不过随写随丢了

就是按下方向键,在DBGRID中自动填充上单元格的内容。

188分奉上,马上结贴
...全文
144 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeinuse 2008-12-02
  • 打赏
  • 举报
回复
是的,呵呵,所以不要用showmessage事件!!!
knife_s 2008-12-02
  • 打赏
  • 举报
回复
准备结贴了,顺便说一下,如果在KEYDOWN中SHOW一个对话框出来,keyup事件无法激发
knife_s 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yeinuse 的回复:]
我想楼主的意思是不是想到把鼠标移动前单元格的内容填充到移动后的单元格上,看代码:

Delphi(Pascal) code
unit Unit1;

...

var
Form1: TForm1;
SelFieldValue: Variant; //全局变量,记录移动前单元格的值

...

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = 37) or (key = 38) or (key = 39) or (key=40) then
begin
//记录…
[/Quote]


稍微改动一下可以了,汗一个,我无语了,我最开始也是想通过KeyDown 和Keyup来解决,在每个事件中放了个showmessage,结果KeyDown可以Show来,Keyup无法Show出来,我以为没有此事件,,,,,,
knife_s 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao_yong 的回复:]
在stringgrid测试通过

Delphi(Pascal) codeunit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: …
[/Quote]


准备上班了,上论坛看看,非常谢谢这个兄弟的代码,不过我是想在DBGrid中做,所以暂时还不能结贴.
genispan 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yeinuse 的回复:]
我想楼主的意思是不是想到把鼠标移动前单元格的内容填充到移动后的单元格上,看代码:

Delphi(Pascal) code
unit Unit1;

...

var
Form1: TForm1;
SelFieldValue: Variant; //全局变量,记录移动前单元格的值

...

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = 37) or (key = 38) or (key = 39) or (key=40) then
begin
//记录…
[/Quote]
6楼测试过吗?
zhao_yong 2008-12-01
  • 打赏
  • 举报
回复
在stringgrid测试通过
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
private
aa:string;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = 37) or (key = 38) or (key = 39) or (key=40) then
begin
aa:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
end;

end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
if aa<>'' then
begin
StringGrid1.Cells[ACol,ARow]:=aa;
end;
end;

end.
yeinuse 2008-12-01
  • 打赏
  • 举报
回复
我想楼主的意思是不是想到把鼠标移动前单元格的内容填充到移动后的单元格上,看代码:

unit Unit1;

...

var
Form1: TForm1;
SelFieldValue: Variant; //全局变量,记录移动前单元格的值

...

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = 37) or (key = 38) or (key = 39) or (key=40) then
begin
//记录焦点移动前的字段值
SelFieldValue := DBGrid1.SelectedField.AsVariant;
end;
end;

procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key= 37) or (key =38) or (key=39) or (key=40) then
begin
//鼠标移动后,自动填充单元格
DBGrid1.SelectedField.AsVariant := SelFieldValue;
end;
end;

...

yeinuse 2008-12-01
  • 打赏
  • 举报
回复
不是很明白楼主的意思,自动填充,哪里的内容填充,或把内容填充到哪里啊,晕呼呼的。
genispan 2008-12-01
  • 打赏
  • 举报
回复
主窗体捕获key
然后query.next
DBGRID.edit
.......
jerry8 2008-12-01
  • 打赏
  • 举报
回复
模拟个回车或Click其他单元格
knife_s 2008-12-01
  • 打赏
  • 举报
回复
弄了半天,还是没解决,只有看论坛有人能帮忙不。
xuliabc 2008-12-01
  • 打赏
  • 举报
回复
没有搞过,学习~

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧