TTreeview如何保存自动删除的对象
2008-04-19 10:25
471 查看
近项目要做一项权限的功能,权限是在TTreeview中来展示,但是在Treeview中的子结点经常要存储很多信息。以前我是利用子结点的addObject方法来添加对象,但是这种方法有一个很大的缺点:当需要重新加载权限的时候,自己必须先释放先前分配的对象,这种方法很容易造成内存泄漏。后来我想到能否通过利用继承TTreeNode来保存对象,然后利用它的析构函数来释放对象。经过一阵子的试验,发现这个方法果然方便多了。下面是相应的操作步骤:
1:新建保存权限的类
struct TPrivelege
{
int ID;
String strName;
ss
};
2:继承TTrreNode类
lass MyNode : public TTreeNode
{
public:
void __fastcall CreatePrev(int Id, String strName)
{
temp = new TPrivelege();
temp->ID = Id;
temp->strName = strName;
}
/*
__fastcall MyNode(TTreeNodes* AOwner, int Id, String strName);
{
TTreeNodes::TTreeNodes(AOwner);//这一句有错
temp = new TPrivelege();
temp->ID = Id;
temp->strName = strName;
}
*/
//很遗憾TTreeNodes::TTreeNodes(AOwner)这句报错,说找不到缺省的构造函数,查看源码明明有,不知道为什么
__fastcall virtual ~MyNode()
{
delete temp;
}
TPrivelege* getPrev()
{
return temp;
}
private:
TPrivelege* temp;
};
3: 设置TTreeview类创建的结点类型为我们自定义的类
TreeView1CreateNodeClass(TCustomTreeView *Sender, TTreeNodeClass &NodeClass)
{
NodeClass = __classid(MyNode);
}
4: 创建结点的方法
MyNode* node = dynamic_cast<MyNode*>treeview->Items->Add(NULL, "根结点1");
node-CreatePrev(1, "tlj");
MyNode* node2 = (MyNode*)TreeView1->Items->AddChild(node, "222");
node2->CreateTemp(2, "yxj");
5:获取结点的方法
MyNode* node = dynamic_cast<MyNode*>treeview->Selected;
node->getPrev()->ID;
node->getPrev()->strName;
很遗憾TTreeNodes::TTreeNodes(AOwner)这句报错,说找不到缺省的构造函数,查看源码明明有,不知道为什么。如果TTreeNodes的构造函数能成功调用,那就可以利用MyNode的构造函数来初始对象的数据,而不需要调用CreatePrev方法了。如果大家知道原因的话,可以告诉我。
1:新建保存权限的类
struct TPrivelege
{
int ID;
String strName;
ss
};
2:继承TTrreNode类
lass MyNode : public TTreeNode
{
public:
void __fastcall CreatePrev(int Id, String strName)
{
temp = new TPrivelege();
temp->ID = Id;
temp->strName = strName;
}
/*
__fastcall MyNode(TTreeNodes* AOwner, int Id, String strName);
{
TTreeNodes::TTreeNodes(AOwner);//这一句有错
temp = new TPrivelege();
temp->ID = Id;
temp->strName = strName;
}
*/
//很遗憾TTreeNodes::TTreeNodes(AOwner)这句报错,说找不到缺省的构造函数,查看源码明明有,不知道为什么
__fastcall virtual ~MyNode()
{
delete temp;
}
TPrivelege* getPrev()
{
return temp;
}
private:
TPrivelege* temp;
};
3: 设置TTreeview类创建的结点类型为我们自定义的类
TreeView1CreateNodeClass(TCustomTreeView *Sender, TTreeNodeClass &NodeClass)
{
NodeClass = __classid(MyNode);
}
4: 创建结点的方法
MyNode* node = dynamic_cast<MyNode*>treeview->Items->Add(NULL, "根结点1");
node-CreatePrev(1, "tlj");
MyNode* node2 = (MyNode*)TreeView1->Items->AddChild(node, "222");
node2->CreateTemp(2, "yxj");
5:获取结点的方法
MyNode* node = dynamic_cast<MyNode*>treeview->Selected;
node->getPrev()->ID;
node->getPrev()->strName;
很遗憾TTreeNodes::TTreeNodes(AOwner)这句报错,说找不到缺省的构造函数,查看源码明明有,不知道为什么。如果TTreeNodes的构造函数能成功调用,那就可以利用MyNode的构造函数来初始对象的数据,而不需要调用CreatePrev方法了。如果大家知道原因的话,可以告诉我。
相关文章推荐
- ios-day13-01(私人通讯录。控制器之间的数据传递、保存密码和自动登录的实现、普通对象的归档、UITableView的局部刷新和向左滑动删除功能等等)
- excel 删除了自动保存的文件,如何恢复
- 如何删除myeclipse下自动保存的svn账号信息
- [WP]如何禁止WP自动保存,删除已经保存的Revision版本
- 如何把Excel中的单元格等对象保存成图片
- 如何把Excel中的单元格等对象保存成图片
- __weak如何实现对象值自动设置为nil的
- 保存数据库中其他对象不变,删除数据库中所有数据的实现方法
- sublime如何自动保存
- ACCESS2010 如何批量自动运行“已保存的导入”或“已保存的导出”
- win7的资源管理器自动存储的搜索历史记录如何删除
- XAF如何通过ControlView自动打开新建的对象实例
- sharedpreferences如何保存对象
- 窗口对象的自动删除
- 如何不要让ndk-build自动删除.so, 或如何链接一个不在lib/armeabi下的第三方库 && NDK Android.mk 语法
- 如何在Xcode中每次编译前,自动保存文档
- 如何调用手机自带的照相机APK进行拍照、录像并自动保存照片和录像
- Spring-Data-MongoDB保存对象的时候,如何不保存_class字段
- [PL/SQL]保存误删除的存储或表等对象到文件
- 如何删除保存的密码(网络访问密码)