首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 動態選單實作:從資料來源到事件綁定的完整流程

     編輯:Delphi

應用場景

選單項目需根據資料庫表、目錄結構、設定檔或使用者權限動態生成,而非設計靜態固定。

三步驟實作

步驟 1:定義事件處理器

type
  TMainForm = class(TForm)
    ...
    procedure MyClick(Sender: TObject); // 自訂點擊事件
  end;

procedure TMainForm.MyClick(Sender: TObject);
begin
  ShowMessage('您點選了:' + TMenuItem(Sender).Caption);
  // 依 Caption 或 Name 執行對應業務邏輯
end;

步驟 2:準備資料來源(範例為字串陣列)

var
  SubMenuSource: array of string; // 動態陣列或 TStringList
begin
  SetLength(SubMenuSource, 3);
  SubMenuSource[0] := '報表列印';
  SubMenuSource[1] := '資料匯出';
  SubMenuSource[2] := '系統設定';
end;

步驟 3:FormCreate 時動態建立選單項

procedure TMainForm.FormCreate(Sender: TObject);
var
  i: Integer;
  mi: TMenuItem;
begin
  for i := 0 to High(SubMenuSource) do
  begin
    mi := TMenuItem.Create(Self);           // 必須指定 Owner 以便自動釋放
    mi.Name := 'DynItem' + IntToStr(i);     // 唯一 Name 便於查找
    mi.Caption := SubMenuSource[i];
    mi.OnClick := MyClick;                  // 綁定統一事件
    FileMenu.Add(mi);                       // 加入主選單「檔案」下
  end;
end;

進階技巧

  • 多層級選單:遞迴建立 TMenuItem 並 Parent.Add(Child)。
  • 圖示支援:設定 ImageList 並指定 ImageIndex。
  • 啟用/可見控制:根據權限動態設定 Enabled、Visible。
  • 快捷鍵:mi.ShortCut := ShortCut(Ord('P'), [ssCtrl]) 設為 Ctrl+P。
  • 釋放時機:若選單需重建,先 FileMenu.Clear(會自動 Free 子項),再重新建立。

常見錯誤

  1. 未指定 Create(Self) 導致記憶體洩漏或 Access Violation。
  2. 在循環中重複 Add 同一個 TMenuItem 實例(每次必須 Create 新實例)。
  3. 事件處理器未正確轉型 TMenuItem(Sender) 導致存取錯誤屬性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved