🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
学员开发过程中遇到的实例 : 一个输入表单,多个 TEdit , 要求按 enter 键, 焦点移动到下一格。 >[warning]学员实现的方法:在 Tedit 的 onkeypress 事件中写功能,依赖 TEdit 的 TabOder 属性来实现。 错误多多,困难重重。总是不听使唤 >[success]本教程推荐方法: 把这些 TEdit 装入tlist 中,做成链表, 定位本 tedit 就可以找到下一个 tedit , 再在 onkeypress 去实现设置下一个 tedit 的焦点,功能科学合理。 TList使用是重要的编程技能,可以说是无处不在。 >[info]链表,各种编程教程,都会讲,讲了,学员不会用,不知道用到哪里。 ``` unit uKrList; interface uses Classes, StdCtrls; type TKrEdit = class public Last: TEdit; CurItem: TEdit; Next: TEdit; end; TKrList = class(TList) private procedure ClearAndFreeAllItems; public procedure Init; function AddNewOne(): TKrEdit; function FindByTag(ATag: integer): TKrEdit; destructor Destroy; override; public GroupBox: TGroupBox; end; implementation { TKrList } function TKrList.AddNewOne: TKrEdit; begin result := TKrEdit.Create; Add(result); end; procedure TKrList.ClearAndFreeAllItems; var e: TKrEdit; I: integer; begin for I := 0 to count - 1 do begin e := TKrEdit(Items[I]); e.free; end; Clear; end; destructor TKrList.Destroy; begin ClearAndFreeAllItems; inherited; end; function TKrList.FindByTag(ATag: integer): TKrEdit; var e: TKrEdit; I: integer; begin result := nil; for I := 0 to count - 1 do begin e := TKrEdit(Items[I]); if e.CurItem.Tag = ATag then begin result := e; Exit; end; end; end; procedure TKrList.Init; var E1, E2: TKrEdit; I: integer; begin for I := 0 to count - 2 do begin E1 := TKrEdit(Items[I]); E2 := TKrEdit(Items[I + 1]); E1.Next := E2.CurItem; end; if count > 0 then begin E2 := TKrEdit(Items[count - 1]); // 最后一个 E1 := TKrEdit(Items[0]); // 第一个 E2.Next := E1.CurItem; end; end; end. ``` **本例的核心问题:如何定位到下一个 tedit ?** 欢迎提供经典编程问题,以便写成教学 demo 示例用 delphi 7 编写 链接:https://pan.baidu.com/s/1qs96T6ZePP0UEK_8NeOzPg 提取码:1234 delphi_五星教程_2022-05-10.zip 中, Jupiter_002: d7 编写 TList 实现,管理 多个 TEdit 的 TabOrder 的跳转,也就是多个 TEdit 的 focus(焦点)按指定顺序跳转