學員開發過程中遇到的實例 :
一個輸入表單,多個 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> 示例