限制键盘值的输入OnKeyPress事件的问题
在表中录入数据时,要限制某一字段(我就要那个字段,怎麽写?)的键盘值输入,
那么就要在OnKeyPress事件里面做,我提几个问题,
分不多,请各位帮忙:
1、在某一字段里自动添加记录数据;如。
begin
Fields[0].AsInteger:=counst+1;
end;
2、限制键盘值的输入,如。
begin
if not(key in[''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',#8]) then
MesBox;
end;
3、上述方法可以实现自动数据添加功能和限定键盘值的输入。但是,我要确定字段,具体的那个字段,确定这个字段的方法怎麽写?
请帮忙,谢谢!
2楼: 进来看看! 如进销存需求分析
3楼: 把它的key值定在某个范围内就行了
4楼: to ksgameboy
我说的是那个数据字段怎么确定?
5楼: 我想是一个很简单的问题,为什么没有人帮助我?
6楼: 说得不是很清楚,有点看不清楚!请楼主说的清楚一些!
记账软件版7楼: 在EDIT事件里试一试
8楼: 你在DBEdit中做限定Key的值就行了.
9楼: 有2个方法:
1:在dbgrid的OnCellClick事件里,用个全局变量先记录下该column,然后再加判断
2:在连接dbgrid的DataSource的OnDataChange事件里判断Field
10楼: to hs-kill:
请注意是StringGrid
分太少,难以看见答案!
11楼: 啊~~~~抱歉,呵呵,就当我眼花了吧
那就在stringgrid的 OnSelectCell事件里根据ACol,ARow:integer 判断是第几列好了,和我前面说的第一种方法一样
12楼: 呵呵,这个比较好玩,楼主要的功能我已经实现了(支持列拖动),我现在在做保存的功能! 如家庭记账软件哪个好
13楼: To ak_2005
我把我的问题改成TDBGrid控件。
能不能把你的代码贴出来,给我看看?
我就这些分了。
以后我再加分!
谢谢了!
记账软件版14楼: DBGrid1.SelectedField不就可以了吗?
15楼: 进来看看!
16楼: 一个问题肯定有多种解决办法!
17楼: 晕,你都改了那没什么必要的了,如果是StringGrid
创建动态数组就可以了。
DBGrid就没必要问这个问题了!
18楼: 关键代码
var FieldNameArr: array of string;//声明字段名数组
--------------------------------------------------------------------
SetLength(FieldNameArr, dataset.Recordset.Fields.Count); //记录字段名
for i := 0 to dataset.Recordset.Fields.Count - 1 do
FieldNameArr[i] := dataset.fields[i].FieldName;
--------------------------------------------------------------------
procedure TForm1.StringGrid1ColumnMoved(Sender: TObject; FromIndex,
ToIndex: Integer);//支持列拖动
var
tempStr: string;
begin
tempStr := FieldNameArr[FromIndex - 1];
FieldNameArr[FromIndex - 1] := FieldNameArr[ToIndex - 1];
FieldNameArr[ToIndex - 1] := tempStr;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);//根据字段控制输入
begin
//其实这里可以写的通用一点
if FieldNameArr[StringGrid1.Col - 1] = ''字段1'' then
if not (Key in[''0''..''9'', #8]) then Key := #0;
if FieldNameArr[StringGrid1.Col - 1] = ''字段2'' then
if not (Key in[''a''..''z'', ''A''..''Z'', #8]) then Key := #0;
//go on
end;
//...............................................................
19楼: to ak_2005
“DBGrid就没必要问这个问题了!”
为什么没有必要?
==============
这段代码:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);//根据字段控制输入
begin
//其实这里可以写的通用一点
if FieldNameArr[StringGrid1.Col - 1] = ''字段1'' then
if not (Key in[''0''..''9'', #8]) then Key := #0;
if FieldNameArr[StringGrid1.Col - 1] = ''字段2'' then
if not (Key in[''a''..''z'', ''A''..''Z'', #8]) then Key := #0;
//go on
end;
应该对我很有启发。
20楼: 上面的代码是行(测试通过了的),我说的是我把它写死了。
----------------------------------------------
因为DBGrid不需要控制
记账软件版21楼: to ak_2005
谢谢你!
我是一个新手,好多问题,我都弄不明白。
简单的问题也是一样。
还好!有你们这些热心的朋友帮助。
在这里我表示深深的敬意!同时:
表示我诚挚的感谢!
22楼: 呵呵,刚开始我开玩笑的,分对我也没有什么用,希望你别介意![:D] 如销售管理软件
23楼: 在OnKeyPress事件里是怎样做的?
24楼: 看看还有没有其他办法?
应该有多种解决途径。
感兴趣的进来看看,说说你的想法。
谢谢!
25楼: Fieldbyname(''字段名'').AsInteger:=counst+1;
26楼: 多人接受答案了。