含有TreeView的窗体停靠到一个控件上产生TreeView的Deletion事件,怎么处理?
/*/
Form1上有一个Panel
一下是unit1.cpp
/*/
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TForm2 *Form2 = new TForm2(NULL);
Form2->Dock(Panel1,Panel1->ClientRect);
Form2->Show();
}
/*/
Form2上有一个TreeView
一下是unit2.cpp
/*/
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
TreeView1->Items->Add(NULL,"1----");
}
//---------------------------------------------------------------------------
void __fastcall TForm2::TreeView1Deletion(TObject *Sender, TTreeNode *Node)
{
ShowMessage("");//程序启动时总是执行该行
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDestroy(TObject *Sender)
{
TreeView1->Items->Clear();
}
TreeView1Deletion总是被执行,在这样的调用方式下如何才能在初始化时不执行TreeView1Deletion?
问题点数:150、回复次数:4Top
1 楼ccrun(老妖)(www.ccrun.com)回复于 2005-09-22 18:55:55 得分 140
试试这样:
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
TreeView1->Items->Add(NULL,"1----");
TreeView1->Items->Add(NULL,"2----");
TreeView1->Items->Add(NULL,"3----");
TreeView1->OnDeletion = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::TreeView1Deletion(TObject *Sender, TTreeNode *Node)
{
ShowMessage("123");//程序启动时总是执行该行
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormShow(TObject *Sender)
{
TreeView1->OnDeletion = TreeView1Deletion;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
// 在这里测试一下是否触发OnDeletion事件
TreeView1->Items->Delete(TreeView1->Selected);
}Top
2 楼setdefault(山转水也转)回复于 2005-09-23 08:44:53 得分 0
谢谢CCRUN,你的方法应该可以解决,能解释一下为什么会触发OnDeletion?
我现在是把TreeView做成动态分配的,停靠在Form1上以后再初始化TreeView那样用起来好像比较安全。因为还发现一些难以解释的问题,先初始化TreeView再停靠窗口,那么停靠前建立的节点TreeNode在访问其属性时出现地址错误,比如读取TreeView->Items->Item[0]->Level。停靠完再初始化TreeView就不会出现这样的问题。Top
3 楼bingyihan(冰易寒)回复于 2005-09-23 17:52:52 得分 10
学习中!Top
4 楼setdefault(山转水也转)回复于 2005-09-26 14:02:13 得分 0
现在问题全部解决了。采用的是先停靠Form再初始化TreeView的办法。Top




