以前用DELPHI做过一个登分的程序,具体功能如下:
stringgrid表单输入,二十条提示保存
在考号框内输入考号,按TAB键,则光标移到姓名格内,自动检索出姓名,再按TAB键,则光标转入成绩栏,如果考生申报则是默认为0,填入成绩后按ENTER换行。
两库同时录入,换行时自动校验是否已登录的成绩是否相同现在客户要求把TAB键换成ENTER键
则出现一个问题
当在第一列内,输入考号,按ENTER,检索姓名后,光标移入第二列
此时循环自动执行了如下
if (key=#13) and (stringgrid1.col=0) then
...
stringgrid1.col:=stringgrid1.col+1;
...if (key=#13) and (stringgrid1.col=1) then
...
stringgrid1.col:=stringgrid1.col+1;
...
这个问题搞得我头都大了
不知这段程序如何写了不知说清楚了没有,肯请大侠出手相助!!
stringgrid表单输入,二十条提示保存
在考号框内输入考号,按TAB键,则光标移到姓名格内,自动检索出姓名,再按TAB键,则光标转入成绩栏,如果考生申报则是默认为0,填入成绩后按ENTER换行。
两库同时录入,换行时自动校验是否已登录的成绩是否相同现在客户要求把TAB键换成ENTER键
则出现一个问题
当在第一列内,输入考号,按ENTER,检索姓名后,光标移入第二列
此时循环自动执行了如下
if (key=#13) and (stringgrid1.col=0) then
...
stringgrid1.col:=stringgrid1.col+1;
...if (key=#13) and (stringgrid1.col=1) then
...
stringgrid1.col:=stringgrid1.col+1;
...
这个问题搞得我头都大了
不知这段程序如何写了不知说清楚了没有,肯请大侠出手相助!!
if (key=#13) and (stringgrid1.col=0) then
...
stringgrid1.col:=stringgrid1.col+1;
... if (key=#13) and (stringgrid1.col=1) then
...
stringgrid1.col:=stringgrid1.col+1; 你的代码是什么意思?下面这样不就可以实现你上面代码的功能了吗,搞那么多重复干嘛
if key=#13 then
stringgrid1.col:=stringgrid1.col+1;
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
if StringGrid1.Col<4 then
begin
StringGrid1.Col:=StringGrid1.Col+1;
end;
if StringGrid1.Col=4 then
begin
StringGrid1.Row:=StringGrid1.Row+1;
StringGrid1.Col:=1;
end;
end;
end;
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
if StringGrid1.Col=1 then
begin
检索数据
StringGrid1.Col:=StringGrid1.Col+1;
end;
if StringGrid1.Col=2 then
begin
检索数据
StringGrid1.Col:=StringGrid1.Col+1;
end;
if StringGrid1.Col=3 then
begin
检索数据
StringGrid1.Col:=StringGrid1.Col+1;
end;
if StringGrid1.Col=4 then
begin
StringGrid1.Row:=StringGrid1.Row+1;
StringGrid1.Col:=1;
end;
end;
end;
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
if StringGrid1.Col=1 then
begin
//检索数据
StringGrid1.Col:=StringGrid1.Col+1;
exit;
end;
if StringGrid1.Col=2 then
begin
//检索数据
StringGrid1.Col:=StringGrid1.Col+1;
exit;
end;
if StringGrid1.Col=3 then
begin
//检索数据
StringGrid1.Col:=StringGrid1.Col+1;
exit;
end;
if StringGrid1.Col=4 then
begin
StringGrid1.Row:=StringGrid1.Row+1;
StringGrid1.Col:=1;
exit;
end;
end;
end;
以上代码我这儿运行的好好的
if (Key = #13) then
begin
if stringgrid.col < stringgrid.colcount - 1 then
stringgrid.col := stringgrid.col + 1
else
begin
stringgrid.row := stringgrid.row + 1;
stringgrid.col := 1;
end;
//可以将检索数据写成函数,在这里调用。
end;我AdvStringGrid是这样做,不知道stringgrid是不是一样。
基本功太差了
谢谢,可行还有个问题
按tab键选中时是第三列是直接高亮显示,可以直接编辑的
而enter进入第三列,则不是,这个问题请问如何解决呢?
可以实现你的目的即可,对一些表面的东西何必强求
那样不是不可编辑了吗
因为数量巨大
所以要求连续
这也是客户要求把TAB更改成ENTER的原因
按tab键选中时是第三列是直接高亮显示,可以直接编辑的
而enter进入第三列,则不是,这个问题请问如何解决呢?
按回车键虽然不是高亮显示,但是也直接可以输入呀,要不你把goRangeSelect设为false吧,
省得为高亮显示而烦恼
现在已经开始做改不了的准备的
不过还是希望能够弄明白
这个stringgrid是比较麻烦
不行只好算了问题 :
按tab键选中时是第三列是直接高亮显示,可以直接编辑的
而enter进入第三列,则不是,这个问题请问如何解决呢?
STRINGGRID.OPTION := STRINGGRID.OPTION+[GOEDITING]
ELSE
STRINGGRID.OPTION := STRINGGRID.OPTION-[GOEDITING]
我是这样用,回车移动后高亮度显示。