不好意思,好多年没用delphi了,现在要修改一个程序的界面,其中有一个TTreeView,如:
--系统
--登录
--注销
--业务
--开户
类似上面的结构,我要实现的功能是:点中'登录'的时候,弹出一个登录窗口,点中'开户'的时候
弹出一个开户操作的窗口,我想要知道的是:
1、如何来判断我当前是点中的是'登录'?
2、我点中的不同的子节点都会有一个相关的窗口弹出,这个能不能用一种简单的类似于case语句
来控制,如:
case (?) of
?: LoginClick; //选中的是登录
?:...? //选中的是注销 end;
--系统
--登录
--注销
--业务
--开户
类似上面的结构,我要实现的功能是:点中'登录'的时候,弹出一个登录窗口,点中'开户'的时候
弹出一个开户操作的窗口,我想要知道的是:
1、如何来判断我当前是点中的是'登录'?
2、我点中的不同的子节点都会有一个相关的窗口弹出,这个能不能用一种简单的类似于case语句
来控制,如:
case (?) of
?: LoginClick; //选中的是登录
?:...? //选中的是注销 end;
procedure TForm1.FormCreate(Sender: TObject);
var
node,subNode : TTreeNode;
begin node := TreeView1.Items.Add(nil,'系统');
TreeView1.Items.Addchild(node,'登录');
TreeView1.Items.Addchild(node,'注销'); node := TreeView1.Items.Add(nil,'业务');
TreeView1.Items.Addchild(node,'开户');end;procedure TForm1.TreeView1Click(Sender: TObject);
begin
if not Assigned(TreeView1.Selected) then exit; ShowMessage(TreeView1.Selected.Text);
end;
如果内容不多的话,可以自己进行判断:
if treeview1.Selected.Text=‘登录' then ShowMessage('ok');
Node.data 這是個指針來的,你可翠通過他來做。放入一個結構,或類來處理
那就用if 來判斷吧.
if treeview1.Selected.Text=‘登录' then begin end
if treeview1.Selected.Text=‘注销' then begin end
...
{我刚才试了试,写了一个方法仅供参考,稍微有点复杂:}
private
{ Private declarations }
tvarr: array of string;{保存treeview的节点名称}
function ReTVIndex(tvtest: TTreeView): Integer;{返回treeview对应的index值(实际为tvarr的下标)}
{将节点的名称保存在数组里面}
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
SetLength(tvarr, TreeView1.Items.Count);
for i := 0 to TreeView1.Items.Count - 1 do
begin
tvarr[i] := TreeView1.Items[i].Text;
Memo1.Lines.Add(IntToStr(i) + '--' + tvarr[i]);{主要是为了看的清晰,可以删掉}
end;
end;
{这个函数很简单,判断选择的节点名称是否和数据里面的相等,如果相等则返回数组下标}
function TForm1.retvindex(tvtest: TTreeView): Integer;
var
i: Integer;
str: string;
begin
str := tvtest.Selected.Text;
for i := 0 to tvtest.Items.Count - 1 do
if tvarr[i] = str then Result := i;
end;
{这里建议用双击事件,单击事件如果选择到节点前面的'+'号就会触发单击事件,操作起来麻烦}
procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
case retvindex(TreeView1) of
0: ShowMessage(IntToStr(retvindex(TreeView1)) + TreeView1.Selected.Text);
{用到哪几个节点的事件就写在这里,默认的节点编号是从0开始的}
end;
end;