学员开发过程中遇到的实例 :
一个输入表单,多个 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(焦点)按指定顺序跳转
- 0.1 教程说明
- 0.2 delphi xe8 安装
- 0.2.2 XE 10.3.3 安装
- 0.3 delphi IDE 的非常必要的配置
- 0.4 调试中的异常处理
- 0.5 工程路径设置
- 0.6 开发工具界面切换成中文的问题
- 一、实用技巧
- 0.尝试为event取名叫伊文特
- 1.各种(变量)数据在内存中是什么样子的?
- 2
- 3
- 4.乱码问题
- 5
- 二、多线程
- 三、DLL相关
- 1.DLL中函数参数如何设计?
- 2.调用易语言DLL识别验证码
- 四、界面设计
- 1.关于解耦问题
- 2.登录功能设计
- 五、面向对象基础知识
- 1.窗口间传递值
- 3.避免又臭又长的裹脚布
- 2.扩展 TStringGrid , delphi 7 示例
- 六、初学者误区集锦
- 七 TList 集合
- 1.附加信息Pointer设计
- 2.用 TList 来建立组件间的联系
- 3.泛型 TList<T> 示例