|
차라리, 노드를 만드는 시점에서, 원하시는 기본값으로 값을 셋팅을 하고,
NULL 일때 따로 노드를 삭제하는것은 어떻까요..?
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TTreeNode *AddtionNode = NULL;
bool Edited = false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AddtionNode = TreeView1->Items->AddChild(TreeView1->Selected, "새 폴더");
Edited = false;
GroupNodeJustAdded(AddtionNode);
}
//---------------------------------------------------------------------------
void TForm1::GroupNodeJustAdded(TTreeNode *NewNode)
{
if (NewNode->Parent) NewNode->Parent->Expand(false);
NewNode->ImageIndex = 0;
NewNode->SelectedIndex = 1;
NewNode->StateIndex = -1;
NewNode->EditText();
}
void __fastcall TForm1::TreeView1Edited(TObject *Sender, TTreeNode *Node, AnsiString &S)
{
if(AddtionNode) {
if(S == "") {
AddtionNode->Delete();
AddtionNode = NULL;
}
}
}
//---------------------------------------------------------------------------
권혁준 님이 쓰신 글 :
: 폼에 있는 뉴그룹버튼을 클릭하면
: void __fastcall TForm1::NewGroupClick(TObject *Sender)
: {
: TTreeNode *TempNode;
: TTreeView *RadioView;
: ...............
:
: //새로운 노드를 만들고 ( ccc )
:
: TempNode = RadioView->Items->AddChild(RadioView->Selected, "");
: GroupNodeJustAdded(TempNode);
: .......................
:
: }
:
: aaa
: |
: +bbb
: |
: +ccc
:
: void TForm1::GroupNodeJustAdded(TTreeNode *NewNode)
: {
: if (NewNode->Parent) {
: NewNode->Parent->Expand(false);
: }
: NewNode->ImageIndex = 0;
: NewNode->SelectedIndex = 1;
: NewNode->StateIndex = -1;
: NewNode->EditText(); //그 노드(ccc)를 에디트모드로 만들게 했습니다.
:
: }
: // 검사는 이곳에서 하려 합니다
: void __fastcall TForm1::RadioViewEdited(TObject *Sender, TTreeNode *Node,
: AnsiString &S)
: {
: if ( S.IsEmpty() ) // ccc가 비었을때
: {
: MessageDlg("Please Type Group Name", mtError,TMsgDlgButtons() << mbOK, 0);
: Node->EditText();// 안되네요...
: //Node->Delete();아예 지워버릴려고 해도 access violation 나네요
: }
: }
:
: 제가 하고 싶은것은 아무것도 입력되지 않으면 새로운 노드가 안생기게 하려고 합니다..
: 아무것도 입력되지 않았을때 트리뷰를 빠져나간다거나 뉴그룹버튼을 누르면..
: 아무것도 입력되지 않은 노드에 포커스를 주었음 합니다 에디트상태로...
: 그런데 OnEdited()는 수정이 되었을때만 호출되어지는군요....
: 그럼 수정안한 상태로 다른 동작을 하면....호출이 안되는건데..
: 이러면 안되거든요.....1. 무조건 수정이 되게 하려면....
: 어떻게 해야 할까요?...
:
: 2. 검색해보니 OnEdited()에서는 EditText()가 안된다고 하네요,,
: 그럼 어떻게 하지요?
:
: 부탁합니다...고수님들
:
|