写的是权限分配,以前这么写,没问题,不知道为什么这次就说我的有错误,先上代码!
首先声明一个变量nodesel
public
{ Public declarations }
nodesel:TTreeNode;
在treeview的TreeView1MouseUp事件中获取当前选中
nodesel:=TreeView1.GetNodeAt(X,Y);
在添加角色组的按钮的ToolButton1Click事件中
if nodesel<>nil then
begin
if DMJueseguanli.QueryCSelect(nodesel.Text)=true then //判断是否为角色,的一个函数
begin
Application.MessageBox('角色下不能添加角色组',sysinfo,mb_ok+MB_ICONERROR);
exit;
end;
end;
issel:=false;
try
FrmJueseguanliedit:=TFrmJueseguanliedit.Create(Application);//创建添加角色的窗口暂时叫他编辑窗口吧 FrmJueseguanliedit.ShowModal;
finally
FrmJueseguanliedit.Free;
end;
目前为止没有错误
在这个编辑窗口的FormShow事件中
ComboBox1.Items.Add('0');
if FrmJueseguanli.nodesel<>nil then //这里错误,调用上一个窗口的nodesel不准许
begin
ComboBox1.Items.Add(trim(FrmJueseguanli.nodesel.Text
ComboBox1.ItemIndex:=1;
end
else
ComboBox1.ItemIndex:=0;我以前用xe这么写,没问题,我把代码也一点点的对照过了,现在用的xe2,为什么我在其他窗口调用nodesel有错误呢?怎么解决!!TreeViewDelphi
首先声明一个变量nodesel
public
{ Public declarations }
nodesel:TTreeNode;
在treeview的TreeView1MouseUp事件中获取当前选中
nodesel:=TreeView1.GetNodeAt(X,Y);
在添加角色组的按钮的ToolButton1Click事件中
if nodesel<>nil then
begin
if DMJueseguanli.QueryCSelect(nodesel.Text)=true then //判断是否为角色,的一个函数
begin
Application.MessageBox('角色下不能添加角色组',sysinfo,mb_ok+MB_ICONERROR);
exit;
end;
end;
issel:=false;
try
FrmJueseguanliedit:=TFrmJueseguanliedit.Create(Application);//创建添加角色的窗口暂时叫他编辑窗口吧 FrmJueseguanliedit.ShowModal;
finally
FrmJueseguanliedit.Free;
end;
目前为止没有错误
在这个编辑窗口的FormShow事件中
ComboBox1.Items.Add('0');
if FrmJueseguanli.nodesel<>nil then //这里错误,调用上一个窗口的nodesel不准许
begin
ComboBox1.Items.Add(trim(FrmJueseguanli.nodesel.Text
ComboBox1.ItemIndex:=1;
end
else
ComboBox1.ItemIndex:=0;我以前用xe这么写,没问题,我把代码也一点点的对照过了,现在用的xe2,为什么我在其他窗口调用nodesel有错误呢?怎么解决!!TreeViewDelphi
这个方法就不用说了,效果一样
FrmJueseguanliedit:=TFrmJueseguanliedit.Create(Application);//创建添加角色的窗口暂时叫他编辑窗口吧 FrmJueseguanliedit.ShowModal;
finally
FrmJueseguanliedit.Free;
end;
目前为止没有错误
在这个编辑窗口的FormShow事件中
ComboBox1.Items.Add('0');
if FrmJueseguanli.nodesel<>nil then //这里错误,调用上一个窗口的nodesel不准许
begin
ComboBox1.Items.Add(trim(FrmJueseguanli.nodesel.Text
ComboBox1.ItemIndex:=1;
end
else
ComboBox1.ItemIndex:=0;
===========================================================
FrmJueseguanliedit释放后再次调用会出错! 应该改成这样
===========================================================
try
FrmJueseguanliedit:=TFrmJueseguanliedit.Create(Application);//创建添加角色的窗口暂时叫他编辑窗口吧 FrmJueseguanliedit.ShowModal;
//加到这儿 begin
ComboBox1.Items.Add('0');
if FrmJueseguanli.nodesel<>nil then //这里错误,调用上一个窗口的nodesel不准许
begin
ComboBox1.Items.Add(trim(FrmJueseguanli.nodesel.Text
ComboBox1.ItemIndex:=1;
end
else
ComboBox1.ItemIndex:=0;
//加到这儿 end
finally
FrmJueseguanliedit.Free;
end;
FrmJueseguanliedit.ShowModal;
你可以把这部分封装一下,在 FrmJueseguanliedit所在单元写一个函数,注意不是类函数
procedue ShowFrmJueseguanliedit(nodesel:TTreeNode);这样传递一下
procedue ShowFrmJueseguanliedit(nodesel:TTreeNode);但是在FrmJueseguanliedit中是没有treeview的,所以nodesel:TTreeNode是错误的。
指出一句:通常是这么判断对象if assigned(nodesel) then你的情况确实没见过,我没有用xe, 你的情况是FrmJueseguanli.nodesel这样访问是会出错,出错原因可能是创建释放先后的问题,具体得看代码。但按我的做法,写一个封装方法 在FrmJueseguanli里面调用ShowFrmJueseguanliedit(nodesel),理论上是可以避免这个问题。