DBGridでEnterを押した時にTabと同じような動作をさせたいのですが、
どうしても制御がでいません。
ご指導をよろしくお願いします。
なんか不細工だなぁ・・・
他に良い方法あると思います。
TDBGrid.Options の dgEditing = True の場合は DBGrid1KeyPressイベントの記述もいるみたいです。
(TDBGridのTAB移動だからレコード移動で良いんですよね?)
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) then
begin
Key := VK_TAB;
end;
if (Key = VK_RETURN) and (Shift = [ssShift]) then
begin
Key := VK_TAB + VK_SHIFT;
end;
end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject;
var Key: Char);
begin
if (Key = Char(VK_RETURN)) then
begin
Key := Char(VK_TAB);
end;
if (Key = Char(VK_RETURN)) then
begin
Key := Char(VK_TAB + VK_SHIFT);
end;
end;
上記ソースは
TDBGridのReadOnlyプロパティがTrueの場合はレコード移動。
TDBGridのReadOnlyプロパティがFalseの場合はフィールド移動する模様。
※最終フィールドに行くと次のレコードへ
使えそうにないなら無視でお願いします。
DBGridEx1KeyPress 中で [RET] to [TAB] 変換を行なうと編集中に改行で入力終了できなくなりますので編集は変換しないようにしないといけません
が DBGrid では InplaceEditor を見ることが出来ませんので DBGridEx を使用します
DBGridEx は以前投稿した物を見てください
procedure TForm3.DBGridEx1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then Key := 9;
end;
procedure TForm3.DBGridEx1KeyPress(Sender: TObject; var Key: Char);
begin
if Assigned(DBGridEx1.InplaceEditor) = True then
begin
if DBGridEx1.InplaceEditor.Visible = False then
begin
if Key=Char(13) then Key := Char(9);
end;
end
else
begin
if Key=Char(13) then Key := Char(9);
end;
end;
ツイート | ![]() |