有谁能给个解答啊?Delphi技巧问题!30大赠送!

时间:2022-11-09 05:10:17
我的问题是:
一个Form里面有N个输入框,一个确定按钮,一个取消按钮。现希望打开这个Form时输入焦点自动就在第一个输入框上,而后完成一个输入框的输入后回车能自动将输入焦点转到下一个输入框,当到达最后一个输入框时,回车就能完成按确定按钮的功能,当然用鼠标点确定按钮功能不变,在任何时候按ESC可以等同于按取消按钮。
  请各位大虾问如何实现呢?

12 个解决方案

#1


你在 ONKEYPRESS里写了,
如果是ESC 那么就给 取消按钮 发送一个 单击的 消息。
如果是 回车, 那么就 给下一个 EDIT SETFOCUS
如果是最后一个, 那么就给 确定 发送一个 单击消息了,

这样比较麻烦,可能用TAG,能方便点,
但是思路就是这样了,

#2


判断OnKeyPress事件中的Key参数

#3


delphi 里面easy!

1.在form的OnCreate里面
  Edit1.SetFocus;
2.调整所有edit的tab order, 变成按tab顺序为 edit1...editn buttonOK buttonCancel
3.各他们一个共同的事件 OnKeyPress
    if (key == VK_RETURN) 
    {
      self. Perform(Perform(WM_NEXTDLGCTL, 0, 0);
    }
4.把 BtnCancel的cancel属性变为true, 把他的属性ModalResult变成mrCancel
一些ok了

#4


该回复于2016-06-17 16:48:06被管理员删除

#5


1、设置form的属性activecontrol为edit1
2、首先在edit1.onkeypress中加入一下代码:
     if (key =chr(VK_RETURN)) then
        SelectNext(ActiveControl,true,true);
   在设置输入框的taborder的值,使每个每个edit 的onkeypress事件指向edit1的onkeypress
明白否? 

#6


我的这个Form是主窗口,我在它的onCreate事件里面加了Edit1.SetFocus后,运行不能通过,说是Can not focus a disabled or invisible window,而且改TAB的顺序跟我所说的回车进入下一个输入框是两回事!!另外,还有一个问题,需要在确定按钮按了之后,完成了运算,输入焦点自动回到Edit1,还需要怎样做呢?

#7


OnCreate 不行就在OnShow里面加,或者修改form的activeControl属性,选择第一个Edit
改TAB的顺序就是为了让你能到下一tab stop上去!利用Perform消息就是模拟按了tab键的动作。
self. Perform(WM_NEXTDLGCTL, 0, 0);

抽空看看tab order的说明。
还有setFocus的。

在你的确定按钮里面添加 Edit1.SetFocus;

#8


dudo兄,你的办法有用,但是到最后一个Edit框的时候回车只是把输入焦点转到了确定按钮上,而不是像我说的“相当于按下了确定按钮”

#9


该回复于2016-06-17 16:48:07被管理员删除

#10


那你就在左后一个Edit的OnKeyPress事件里面写上
  ButtonOk.Click(sender);

#11


多谢了:)
偶搞懂了

#12


哪有这么复杂
将form.keypreview设为true
在窗体的
onkeypress里写
if (key =VK_RETURN) then
          self. Perform(WM_NEXTDLGCTL, 0, 0);
    

#1


你在 ONKEYPRESS里写了,
如果是ESC 那么就给 取消按钮 发送一个 单击的 消息。
如果是 回车, 那么就 给下一个 EDIT SETFOCUS
如果是最后一个, 那么就给 确定 发送一个 单击消息了,

这样比较麻烦,可能用TAG,能方便点,
但是思路就是这样了,

#2


判断OnKeyPress事件中的Key参数

#3


delphi 里面easy!

1.在form的OnCreate里面
  Edit1.SetFocus;
2.调整所有edit的tab order, 变成按tab顺序为 edit1...editn buttonOK buttonCancel
3.各他们一个共同的事件 OnKeyPress
    if (key == VK_RETURN) 
    {
      self. Perform(Perform(WM_NEXTDLGCTL, 0, 0);
    }
4.把 BtnCancel的cancel属性变为true, 把他的属性ModalResult变成mrCancel
一些ok了

#4


该回复于2016-06-17 16:48:06被管理员删除

#5


1、设置form的属性activecontrol为edit1
2、首先在edit1.onkeypress中加入一下代码:
     if (key =chr(VK_RETURN)) then
        SelectNext(ActiveControl,true,true);
   在设置输入框的taborder的值,使每个每个edit 的onkeypress事件指向edit1的onkeypress
明白否? 

#6


我的这个Form是主窗口,我在它的onCreate事件里面加了Edit1.SetFocus后,运行不能通过,说是Can not focus a disabled or invisible window,而且改TAB的顺序跟我所说的回车进入下一个输入框是两回事!!另外,还有一个问题,需要在确定按钮按了之后,完成了运算,输入焦点自动回到Edit1,还需要怎样做呢?

#7


OnCreate 不行就在OnShow里面加,或者修改form的activeControl属性,选择第一个Edit
改TAB的顺序就是为了让你能到下一tab stop上去!利用Perform消息就是模拟按了tab键的动作。
self. Perform(WM_NEXTDLGCTL, 0, 0);

抽空看看tab order的说明。
还有setFocus的。

在你的确定按钮里面添加 Edit1.SetFocus;

#8


dudo兄,你的办法有用,但是到最后一个Edit框的时候回车只是把输入焦点转到了确定按钮上,而不是像我说的“相当于按下了确定按钮”

#9


该回复于2016-06-17 16:48:07被管理员删除

#10


那你就在左后一个Edit的OnKeyPress事件里面写上
  ButtonOk.Click(sender);

#11


多谢了:)
偶搞懂了

#12


哪有这么复杂
将form.keypreview设为true
在窗体的
onkeypress里写
if (key =VK_RETURN) then
          self. Perform(WM_NEXTDLGCTL, 0, 0);