当前位置:主页>销售管理软件> 列表

限制键盘值的输入OnKeyPress事件的问题

记账软件版1楼: 我用的数据库是Accass,用TDBGrid显示数据,
在表中录入数据时,要限制某一字段(我就要那个字段,怎麽写?)的键盘值输入,
那么就要在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楼: 多人接受答案了。