我有一个弹出菜单,里面有一些项目。
选项1 - 子 1 - 子 2 选项 2 - 子 1 - 子 2 选项 3 - 子 1 - 子 2
我希望能够向选项 3 sub2 添加一个子子菜单,所以它看起来像:
选项1 - 子 1 - 子 2 选项 2 - 子 1 - 子 2 选项 3 - 子 1 - 子 2 - 动态项目1 - 动态项目2 - 动态物品3
我一直在尝试使用下面的代码来解决这个问题,我可以做到“如果”菜单选项不存在(选项 3),但如果选项 3 已经存在(它会创建一个重复菜单选项)
我该怎么做?
谢谢
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;
type
TForm2 = class(TForm)
popMenu: TPopupMenu;
gbDynamic: TGroupBox;
gbMain: TGroupBox;
popDynamic: TPopupMenu;
Option11: TMenuItem;
Option21: TMenuItem;
Option31: TMenuItem;
Sub11: TMenuItem;
Sub21: TMenuItem;
Item11: TMenuItem;
Item21: TMenuItem;
Item31: TMenuItem;
Item41: TMenuItem;
Sub12: TMenuItem;
Sub22: TMenuItem;
Sub13: TMenuItem;
Sub23: TMenuItem;
Option12: TMenuItem;
Sub24: TMenuItem;
Sub14: TMenuItem;
Option22: TMenuItem;
Sub25: TMenuItem;
Sub15: TMenuItem;
Option32: TMenuItem;
Sub26: TMenuItem;
Sub16: TMenuItem;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Procedure PopupItemClick ( Sender : TObject );
end;
var
Form2: TForm2;
stlist: TStrings;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
Var
menuItem,SubItem : TMenuItem;
I, N : Integer;
s : String;
begin
//This will be a downloaded list from a server.
stlist := TStringList.Create;
stlist.Add ( 'Item 1' );
stlist.Add ( 'Item 2' );
stlist.Add ( 'Item 3' );
SubItem := TMenuItem.Create(popDynamic);
SubItem.Caption := 'Option 3';
popDynamic.Items.Add(SubItem);
MenuItem := TMenuItem.Create(popDynamic);
MenuItem.Caption := 'Sub 1';
SubItem.Add(MenuItem);
//This would work if Option 3 menu item was not aleady a menu item.
For I := 0 To stlist.Count - 1 Do
Begin
SubItem := TMenuItem.Create ( popDynamic );
SubItem.Caption := stlist [i];
SubItem.OnClick := PopupItemClick;
//assign it a custom integer value..
SubItem.Tag := i;
MenuItem.Add(SubItem);
End;
end;
Procedure TForm2.PopupItemClick ( Sender : TObject );
Var
menuItem : TMenuItem;
Begin
menuItem := TMenuItem ( sender );
label1.caption := stlist.Strings [menuItem.Tag];
End;
end.
形式:
object Form2: TForm2
Left = 0
Top = 0
Caption = 'Form2'
ClientHeight = 247
ClientWidth = 480
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object gbDynamic: TGroupBox
Left = 0
Top = 0
Width = 217
Height = 247
Align = alLeft
Caption = 'Dynamic'
PopupMenu = popDynamic
TabOrder = 0
object Label1: TLabel
Left = 48
Top = 32
Width = 31
Height = 13
Caption = 'Label1'
end
end
object gbMain: TGroupBox
Left = 217
Top = 0
Width = 263
Height = 247
Align = alClient
Caption = 'What I Want Dynamically Created'
PopupMenu = popMenu
TabOrder = 1
ExplicitLeft = 336
ExplicitTop = 72
ExplicitWidth = 185
ExplicitHeight = 105
end
object popDynamic: TPopupMenu
Left = 136
Top = 96
object Option12: TMenuItem
Caption = 'Option 1'
object Sub14: TMenuItem
Caption = 'Sub 1'
end
object Sub24: TMenuItem
Caption = 'Sub 2'
end
end
object Option22: TMenuItem
Caption = 'Option 2'
object Sub15: TMenuItem
Caption = 'Sub 1'
end
object Sub25: TMenuItem
Caption = 'Sub 2'
end
end
object Option32: TMenuItem
Caption = 'Option 3'
object Sub16: TMenuItem
Caption = 'Sub 1'
end
object Sub26: TMenuItem
Caption = 'Sub 2'
end
end
end
object popMenu: TPopupMenu
Left = 256
Top = 112
object Option11: TMenuItem
Caption = 'Option 1'
object Sub13: TMenuItem
Caption = 'Sub 1'
end
object Sub23: TMenuItem
Caption = 'Sub 2'
end
end
object Option21: TMenuItem
Caption = 'Option 2'
object Sub12: TMenuItem
Caption = 'Sub 1'
end
object Sub22: TMenuItem
Caption = 'Sub 2'
end
end
object Option31: TMenuItem
Caption = 'Option 3'
object Sub11: TMenuItem
Caption = 'Sub 1'
object Item11: TMenuItem
Caption = 'Item 1'
end
object Item21: TMenuItem
Caption = 'Item 2'
end
object Item31: TMenuItem
Caption = 'Item 3'
end
object Item41: TMenuItem
Caption = 'Item 4'
end
end
object Sub21: TMenuItem
Caption = 'Sub 2'
end
end
end
end