简单的控件顺序问题(20分)

  • 主题发起人 主题发起人 chinahx
  • 开始时间 开始时间
C

chinahx

Unregistered / Unconfirmed
GUEST, unregistred user!
在form上有n个控件(文本框),当窗体creat之后焦点落在
第一个文本框空间上,然后用户输入数值,之后按回车键,
焦点自动转到下一个控件上,再输入值,再回车,
焦点自动转到下一个控件上....。

请问怎样实现这个功能?
 
if key=#13 then
postmessage(self.handle,wm_keydown,vk_tab,0);

也可以
if key=#13 then
begin
SendMessage(Self.Handle, WM_NEXTDLGCTL, 0, 0);
Key := #0;
end;
 
谢谢,你写的对我帮助很大,
但是我有一个问题,我将上述代码一一写在每个文本控件的OnKeyPress事件中,
我的窗口上大约有三十多个控件,是否每一个都需要这样做?
当然另一个办法就是将上述代码单独写道一个函数里面,然后在所有OnKeyPress
事件中调用它。

除此以外,有别的办法吗?

请指教,谢谢
 
在窗体上选中所有控件(shift+mouse),然后F11,清除掉控件的onkeypress事件
,然后写入一个事件处理函数名,就可以多个控件公用一个事件处理程序了,不过
如果你每个控件还需要在keypress时做起他的事情,就得写case了,或者放到
onkeydown(onkeyup)事件处理中去
 
可以用actionlist控件来实现多个控件处理相同的事件,
还可以在对象监视器里,把控件的事件名去掉,改成想用的事件
例如:在button的OnKeyPress事件里把别的名考进去,button2onkeypress就可以实现
button1和button2的onkeypress事件相同的结果,不用在另外写代码了。
 
form1.keypreview:=true;
然后处理form1的onkeypress事件
if (activecontrol is tedit) then begin
postmessage(tedit(activecontrol).handle,wm_keydown,9,0);
postmessage(tedit(activecontrol).handle,wm_keyup,9,0)
end
 
假如你要移动的控件,他们的parent都是form(或者具有同属于一个控件)的话那么可以
这样:
if key = #13 then
begin
key:=#0;
selectnext(ActiveControl,true,true);
end;
 
所有控件的onkeypress事件均一样,将这些控件的onkeypress事件指向同一个处理过程即可;
不需每个都写一遍
 
但是在frame上的panel里面的控件就不能如我所愿,为什么?
 
if key=#13 then
begin
SendMessage(Parent.Handle, WM_NEXTDLGCTL, 0, 0);
Key := #0;
end;
 
这样不是太麻烦了吗?用消息啊。
 
多人接受答案了。
 
后退
顶部