注册 登录
编程论坛 Delphi论坛

如何实现控件的焦点转移并把焦点控件的内容输出

超超小火星 发布于 2008-11-21 16:00, 3627 次点击
窗体上只有edit1到edit7  七个控件 ,要求能实现在按下回车和DOWN ARROW键时能实现控件的焦点转移(edit1到edit6),并且要能把获得焦点的控件中的内容text在edit7中输出。      ------(我只能实现焦点转移部分是最笨的方法实现地  而内容输出部分是在没有办法 请各位版主和大侠帮个忙。)
4 回复
#2
ruanjian21102008-11-21 17:20
使用if语句做下判断,哪个获得焦点就把获得焦点的控件中的内容text在edit7中输出就行了..
#3
provoke2008-11-21 23:21
给 Edit1添加 OnEnter 事件,代码只需一行:
Edit7.Text := (Sender as TEdit).Text;

选中其他5个,在属性面板中将5个的 OnEnter 事件指定为 Edit1Enter 即可;
另外,在窗体的 OnShow 事件里执行一次初始化,让其显示当前已获得焦点控件的 text:
Edit1.SetFocus;
#4
provoke2008-11-21 23:27
本人最讨厌用回车键实现 Tab 键的功能……要实现按方向键移动,就要在控件的 OnKeyDown 事件琢磨琢磨了,不难。
至于获得焦点,用SetFocus 方法即可。只要是能获得焦点的控件,应该都有这个方法。

给一句超级无敌的 OnKeyDown 事件代码出来:

  if Key = VK_DOWN then
    TEdit(Controls[(Sender as TEdit).ComponentIndex +1]).SetFocus;

一下看不懂没关系,慢慢研究去

同样是6个 Edit 的 OnKeyDown 事件共用一个。不过有一点要注意,就是 +1部分:必需保证 Edit7 不用这个事件或者至少有一个 Edit 的 OnKeyDown 不用这个事件,否则会发生下标越界错误。

当然,为安全起见,还可进行例外处理,如嵌入到 try...except 中,或者判断一下中括号部分是否小于 Edit 控件的数量(按楼主的要求,为7), 只有小于才是安全的。

[[it] 本帖最后由 provoke 于 2008-11-22 00:15 编辑 [/it]]
#5
超超小火星2008-11-24 16:47
回复 第4楼 provoke 的帖子
太感谢版主provoke了  O(∩_∩)O哈哈~   俺实现功能了 那段超级代码俺也弄明白了 在老婆面前一顿炫耀(她也是敲代码地)
1