检查如果输入的字符超过两个字符,就跳转到下一格,现在如果快速连击两个键就会多跳一个格,不知何原因procedure TShowContentForm.bodyStringGridKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
var
i : integer; //控制行变换
j : integer; //控制列变量
begin
i:=bodystringgrid.row; //当前行
j:=bodystringgrid.col; //当前列
if length(bodystringgrid.Cells[j,i])>=2 then //限制只能输入两个字符
begin
with bodyStringGrid do
if Col = 8 then begin
Row := Row+1;
Col :=1;
end
else
Col := Col + 1;
end;
end;procedure TShowContentForm.bodyStringGridKeyPress(Sender: TObject;
var Key: Char);
var
i : integer;
k,j : integer;
begin
i:=bodystringgrid.row; //当前行
j:=bodystringgrid.col; //当前列
k:=length(bodystringgrid.Cells[j,i]);
key :=Upcase(Key);
if ((key<'A') or (key>'F')) and ((key<'0') or (key>'9')) then
begin
messagedlg('不合法输入',mtwarning,[mbok],0);
key := #0;
end;
if k=2 then bodystringgrid.Cells[j,i] := key; //如果当前单元格中以有两个字符,则替代
end;
var Key: Word; Shift: TShiftState);
var
i : integer; //控制行变换
j : integer; //控制列变量
begin
i:=bodystringgrid.row; //当前行
j:=bodystringgrid.col; //当前列
if length(bodystringgrid.Cells[j,i])>=2 then //限制只能输入两个字符
begin
with bodyStringGrid do
if Col = 8 then begin
Row := Row+1;
Col :=1;
end
else
Col := Col + 1;
end;
end;procedure TShowContentForm.bodyStringGridKeyPress(Sender: TObject;
var Key: Char);
var
i : integer;
k,j : integer;
begin
i:=bodystringgrid.row; //当前行
j:=bodystringgrid.col; //当前列
k:=length(bodystringgrid.Cells[j,i]);
key :=Upcase(Key);
if ((key<'A') or (key>'F')) and ((key<'0') or (key>'9')) then
begin
messagedlg('不合法输入',mtwarning,[mbok],0);
key := #0;
end;
if k=2 then bodystringgrid.Cells[j,i] := key; //如果当前单元格中以有两个字符,则替代
end;
代码有些问题,
1:在keyup中,如果已经满了两个字符,用左右键会能回去
2:keypress中,我按esc,把原来的字符都删了。