郁闷,该死的OnKeypress(100分)

  • 主题发起人 主题发起人 sleep
  • 开始时间 开始时间
我觉得你的问题主要是编程方法造成的:
编程时,请不要过分倚重OnKeyPress、OnExit等,不要设定Focus的跳转。
否则,在跳转多、且逻辑复杂时,你会遇到很多麻烦,解决了一个,还会
遇到下一个,麻烦无穷。你遇到的第二个问题就是自认为解决了第一个问
题造成的。如果这样下去,只要你继续开发,就还会遇到类似的问题。你
的跳转和On...会越来越多、越来越复杂。不信,你设想一下,如果你要
在这些EDIT中再加一个EDIT,你就会感到有多麻烦、多痛苦了。
要根本解决你的问题,应该从编程方法上解决,而不是具体技术上解决。
这样的CODE,就算你解决了,也是MESS CODE,以后后患无穷。
 
歪就歪大侠:
不是我自认为怎样,但是任务的要求摆在这里,我也没有办法呀! 跳转
是老板的要求,我也没辙呀。 实际问题讨厌死了,给你举个例子:
如果DBEdit1输入的是1,DBEdit输入的是2,那么在DBEdit3录入的数据完成后,
输入焦点跳到DBEdit6
如果EBEdit1输入的是2.........................
我都跳得头大了。 faint. 你有什么好办法吗?也就是你说的编程方法上解决?
 
郁闷! 我算发现了,这些细节问题是最要命的。 3、40个DBEdit, 我跳了
好几天了。这是一个有针对性的数据录入程序,没有啥太多技巧好用吧? :(
 
别大侠,我算大瞎,好不好?
一、能不能和你老板商量一下,告诉他这种跳转很容易做,但很难扩展,而且
今后不能维护(这是费话,不过,你可以去商量一下)
二、对于这种录入要求,我是这么做的:
A:把录入逻辑路径分成不同的组,用类似WIZARD的东西,一页一页的过去。
B:如果分不出来,或者感觉这样会影响录入速度,就非要放在一页上录入不
可,可以在EDIT1填1时,马上Disable不用的Edit3,填2时,DISABLE不用的
EDIT4、5等,这样,录入员仍然可以用TAB键。
祝好晕。抱歉,要睡觉了,明天再来看。
 
能不能把所有的条件全列出来??请大家别在讨论我的代码了。我只是把另一个模式
超了过来。不适用这种情况。代码写的也不完全。当然问题百出了!!;~)
 
sleep:关于你要连续输入的问题,提供以下参考。
我觉得你的做法很不合理,最后一个DBEDIT你不管它输入什么就,转入下一条数
据?要是你的这条记录不想存盘呢?我认为你可以这样做。
放两个bitbtn一个为ok,一个为cancel,当最后一个DBEDIT完成后跳至ok,回车后
即可执行insert,cancel执行跳至第一个dbedit重输。你说的所有问题都会随之消失在风中,不知全条件否?
 
to 歪就歪: 根本就不要求扩展,只是针对某一个研究问卷而专门制定的数据
录入程序而已。如果没这么多要求,何苦编这个程序,直接在foxpro里面
录入就得了。 关键是人家想要方便啊!
to 阿蒙: 条件就是几种 :
1. 有的DBEdit要求输入4位数字,有的是1位数字,有的是一串(位数为偶数)
2. 要求能做到逻辑判断,即根据不同的要求跳到不同的DBEdit中去。
每个DBEdit的逻辑判断标准不一样。 有的不需逻辑判断,录入完毕
就跳到下一个。
3. 当最后一个DBEdit,即DBEdit35中的数据 (1位数字)录入完毕之后,
弹出"录入新数据"的Form2窗口,里面录入新的数据编号,如果编号是合理的
就在库中插入这个编号,并从DBEdit1开始新一轮录入。
其它部分都很简单,关键就是最后一个问题,我很头疼!!!
~~~~~~~~~~~~~
to sonie:
最后一个数据当然也是需要判断的,只要是合理的,就直接弹出录入新数据
的窗口。

希望各位亲自动手试一试,帮俺解决问题.不动手试一试,
可能会误解俺的意思,sigh.
 
我看在最后一个框的onchange中写东西是不现实的,会出现很多问题,能否在onkeypress中写几句话,如果输入正确直接转入下一条数据输入?
 
sigh, 问题就在这里了,如果我用Onkeypress,结果DBEdit35中的数据会变成下一
条记录中的值,本条记录中却为空,faint
 


<font color="#5090F0" size="10">自己做个控件!</font>

 
sigh. 越说越远了。 我现在想解决的是最后一个问题,faint.
 
没看懂最后一个问题:)
 
sleep:
在每个DBEdit的OnChange事件中,你的判断语句应写为:
if (DBEdit.Focused) and (Length(DBEdit.Text)=6) then
... ...
否则在DBGrid中浏览数据时会出错。
这样,你的最后一个问题好象也可解决了,以下代码
我试了一下可以运行,请你自己再验证:
procedure TForm1.DBEdit1Change(Sender: TObject);
var
xx:string;
begin
if (DBEdit1.Focused) and (Length(DBEdit1.Text)=6) then
begin
xx:=InputBox('Input Box', 'Prompt', 'Default string');
if Length(xx)=8 then
begin
Table1.Insert;
Table1.FieldByName('W0').Value:=xx;
Table1.Post;
end;
end;
end;
 
我也晕了。:)
不过我还是不太明白你现在最头痛的是哪个问题,也就是说哪个是最后一个问题?
 
sleep:你在dbedit35的onkeypress的代码是怎么样的,能否帖出?
以下为我认为应该的代码:
if key符合条件 then
begin

key:=key;//有没有这句
table.post;
table.insert;
end
else
...
是不是忘了key:=key这句。
 
多人接受答案了。
 
后退
顶部