|
ghost 님이 쓰신 글 :
: TreeView에 관한 질문을 하나 올리까 합니다.
: 제가 TreeView에서 생성하고 지우고 자식 아이템까지 생성하는 것을 성공했는데.. 문제가 발생했어요.
: 오른쪽 마우스로 클릭을 해서 클릭한 폴더 밑에 바로 생성되어야 하거든요.
: 그런데 잘 안되네요.
: 하지만, 오른쪽 버튼클릭은 됩니다.->이게 마우스를 뜻하는것은 아시죠?^^"
: (RightClickSelect이 properties로 true로 해서) 성공이 되었는데 이 망할 것이 오른쪽 버튼을 클릭을 해서 생성을 하면(Add)로 하면 오른쪽 버튼을 클릭한 자릴 인식하지 못하고 처음 클릭한 폴더 맨 밑으로 생성이 된답니다. (만일 Add가 아닌 Insert로 한면 폴더 바로 위에 생성된답니다.)
: project를 낼 까정 끝내야하는데.... 제발 좀 도와주세요..
: 답변 기다릴께용!!!
: 만일 답을 주신 분은 저도 소스하나 올릴께요...
안녕하십니까?
임문환입니다.
제가 답변해도 되는지 잘 모르겠지만...
찾고 계신 작업 목적에 부합하는 것인지 잘 모르겠지만
아래 방법은 어떨까요?
아래에서는 현재 노드를 알아내는 메서드와 그 것을 이용하는 메서드가 서로 다른데
만약 실제 작업 시 새 노드를 생성하는 메서드가 마우스 커서의 좌표를 자동으로
매개 변수로 전달받는 곳이라면 아래의 TreeView1MouseDown이 필요 없고 그 내부의
CurrentNode=TreeView1->GetNodeAt(X,Y);는
새 노드를 생성하는 메서드(이 예에서는 AddNewNode)에 통합 가능합니다.
//------------------------------------------------------------------------------------------
class TForm1 : public TForm
{
TTreeNode *CurrentNode;
void __fastcall AddNewNode(AnsiString text);
}
//------------------------------------------------------------------------------------------
void __fastcall TForm1::TreeView1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button==mbRight) CurrentNode=TreeView1->GetNodeAt(X,Y);
}
//------------------------------------------------------------------------------------------
void __fastcall TForm1::AddNewNode(AnsiString text)
{
if(CurrentNode==NULL)
return;
else
{
TreeView1->Items->AddChild(CurrentNode,text );
CurrentNode=NULL;
}
}
//------------------------------------------------------------------------------------------
끝.
|