stringgrid如何设计其中的小单元的过滤(80分)

  • 主题发起人 主题发起人 dbc
  • 开始时间 开始时间
D

dbc

Unregistered / Unconfirmed
GUEST, unregistred user!
1:我想让stringgrid的某单元动态生成过滤,使它只能输入
数字,或只能输入日期。
 
参看以下:

把一个Edit盖在StringGrid上,具体实现方法是在
Grid的OnKeyDown事件中进行判断。如果按的键是方向键,则Edit就移动到
相应的网格上,而且Edit的宽度要根据相应StringGrid的宽度作出改变(要检测
StringGrid的宽度),要如果按数字或字母键,Edit就对数据集进行编辑,这样,
真正接受输入的就不是StringGrid而是Edit,实现进来虽然麻烦,但可以实现很
多灵活性,例如限制输入字串的长度、类型等。


放一个Edit,在StringGrid上,然后在此Edit的OnExit事件中加入:
//只许输入整数
try
StrToInt(DBEdit1.Text);
except
ShowMessage('无效的整数!');
Abort;
end;

//只许输入日期
try
StrToDate(DBEdit1.Text);
except
ShowMessage('无效的日期!');
Abort;
end;

//只许输入金额
try
StrToCurr(DBEdit1.Text);
except
ShowMessage('无效的金额!');
Abort;
end;
最后再把Edit.Text的值赋给StringGrid的相关单元。
 
在StringGrid的OnSelectCell和OnExit事件中加校验
 
我想在一个单元写完后判断,select cell 是在之前,onexit 是在总的之后
 
可以在OnGetEditMask事件中解决。
 
同意miki:
在StringGrid的OnSelectCell和OnExit事件中加校验.
 
补充函数如下:

function TForm1.CheckData(row,col:integer):boolean;
begin
result:=true;
if StringGrid1.Cells[col,row]='' then exit;
if 0&ltStringGrid1.Cells[col,row] and StringGrid1.Cells[col,row]&lt9 then
begin
ShowMessage('cell('+inttostr(row)+','+inttostr(col)+')'+
'不是数字');
result:=false;
end;
end;

在OnSelectCell和OnExit事件中调用函数进行校验。
 
后退
顶部