delphi treeview 真是见鬼了

憨厚小情郎 2013-04-10 09:05:59
写的是权限分配,以前这么写,没问题,不知道为什么这次就说我的有错误,先上代码!
首先声明一个变量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有错误呢?怎么解决!!
...全文
392 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
憨厚小情郎 2013-04-10
  • 打赏
  • 举报
回复
引用 7 楼 xsl510079027 的回复:
你在引用单元加一个uses ComCtrls,其实窗体界面肯定有这个啊。 指出一句:通常是这么判断对象if assigned(nodesel) then 你的情况确实没见过,我没有用xe……
顺便问一下,uses引用那些,对应那些东西,有木有详细的对照下呀?或者有没有什么好的文章之类的推荐下,谢谢。对着方面不熟悉。
憨厚小情郎 2013-04-10
  • 打赏
  • 举报
回复
恩,方法我,明白了,问题我也找出来了,为了好看,主窗体我用的是CreateTabPage创建,这样没有内存空间,我换了创建方式就好了。
虎子8 2013-04-10
  • 打赏
  • 举报
回复
我说的写的封装函数不是写到public,是写到类外面,单元函数,Implementation上面那里,这是常规做法。至于nodesel:TTreeNode错误 ,跟窗体上有没有treeview是没有关系的。你在引用单元加一个uses ComCtrls,其实窗体界面肯定有这个啊。 指出一句:通常是这么判断对象if assigned(nodesel) then 你的情况确实没见过,我没有用xe, 你的情况是FrmJueseguanli.nodesel这样访问是会出错,出错原因可能是创建释放先后的问题,具体得看代码。但按我的做法,写一个封装方法 在FrmJueseguanli里面调用ShowFrmJueseguanliedit(nodesel),理论上是可以避免这个问题。
憨厚小情郎 2013-04-10
  • 打赏
  • 举报
回复
现在要解决的问题是,为什么在FrmJueseguanli窗口下FrmJueseguanli.nodesel就错误nodesel就没问题。这个解决了,其他的都不是问题了。在xe下这么写过,难道xe2就不能了?如果不能,改怎么调用呢?
憨厚小情郎 2013-04-10
  • 打赏
  • 举报
回复
引用 4 楼 xsl510079027 的回复:
FrmJueseguanliedit:=TFrmJueseguanliedit.Create(Application); FrmJueseguanliedit.ShowModal; 你可以把这部分封装一下,在 FrmJueseguanliedit所在单元写一个函数,注意不是类函数 procedue ShowFrmJueseguanliedit(nodesel:TTreeNode);这样传递一……
你能详细告诉我一下,应该怎么传递么?如果直接在FrmJueseguanliedit中public声明一个函数, procedue ShowFrmJueseguanliedit(nodesel:TTreeNode);但是在FrmJueseguanliedit中是没有treeview的,所以nodesel:TTreeNode是错误的。
虎子8 2013-04-10
  • 打赏
  • 举报
回复
FrmJueseguanliedit:=TFrmJueseguanliedit.Create(Application); FrmJueseguanliedit.ShowModal; 你可以把这部分封装一下,在 FrmJueseguanliedit所在单元写一个函数,注意不是类函数 procedue ShowFrmJueseguanliedit(nodesel:TTreeNode);这样传递一下
憨厚小情郎 2013-04-10
  • 打赏
  • 举报
回复
[quote=引用 2 楼 simonhehe 的回复:] //加到这儿 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 你这一段加在FrmJueseguanliedit.ShowModal;的后面就是个错误,其次,“FrmJueseguanliedit释放后再次调用会出错!”FrmJueseguanliedit这个窗口还没有释放,没有执行完FrmJueseguanliedit.ShowModal,是不会释放窗口的,所以不是这个错误…… 还有我试了一下,在FrmJueseguanliedit.ShowModal之前加载,FrmJueseguanli.nodesel就错误,nodesel就没问题……知道问题是什么了,就是不知道为什么!以前这么调用没问题呀!!
simonhehe 2013-04-10
  • 打赏
  • 举报
回复
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; =========================================================== 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;
憨厚小情郎 2013-04-10
  • 打赏
  • 举报
回复
if FrmJueseguanli.TreeView1.Selected<>nil then 这个方法就不用说了,效果一样
虎子8 2013-04-10
  • 打赏
  • 举报
回复
引用单元: 如果是控件类的话 如treeview:Ttreeview 你按Ctrl点一下Ttreeview 就会跳转到要引用的单元,,当你拖控件时,你的uses里面是会自动添加的。 其它的一些功能函数方面的,就得具体查了,这个很复杂,我也一下说不清

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧