문제

TreeView에서 노드를 클릭 할 때 TreeView의 클릭 이벤트를 사용하여 일부 작업을 수행합니다. 마우스 좌표로 getNodeat ()를 호출하여 클릭하는 노드를 가져 와서 다음과 같이합니다.

private void TreeView_Click(object sender, System.EventArgs e)
{
    MouseEventArgs mouseEventArgs = e as MouseEventArgs;

    if (mouseEventArgs == null)
        return;

    // Get the node that is being clicked.                  
    TreeNode node = this.GetNodeAt(mouseEventArgs.X, mouseEventArgs.Y);

    // Do other stuff...
}

그러나 getNodeat () 메소드는 클릭이 노드 레이블에있을 때만 작동합니다. 노드 이미지를 클릭 한 다음 getNodeat ()가 NULL을 반환합니다. 이미지를 클릭 할 때 노드가 실제로 선택되기 때문에 이것은 약간 성가신 일이지만 어떤 노드인지 알 수 없습니다.

누구든지 제안이 있습니까?

업데이트 : SelectedNode를 대신 사용하는 제안을 받았습니다. 클릭 이벤트가 발사 된 후에 설정되었으므로 할 수 없습니다. 이것은 실제로 TreeView를 물려받는 컨트롤과 그 일이 Fire It Clicked 이벤트이지만 Treenode가 Treenode 자체 대신 나타내는 기본 데이터를 사용합니다.

업데이트 : 누군가가 코드에서 getNodeat () 메소드를 무시한이 동작을 소개했는데, 나는 깨닫지 못했습니다. 따라서 질문은 무효이며 getNodeat () 메소드에 아무런 문제가 없습니다. 누군가가 이것을하는 이유는 여전히 미스터리로 남아 있습니다. :)

도움이 되었습니까?

해결책

BeforeSelect 또는 AfterSelect 이벤트를 사용해 보셨습니까? TreeViewCancelEventArgs에서 선택한 노드를 직접 가져온 다음 클릭 이벤트에서 사용할 수 있습니다.

편집 : 추가 사고 : 이것으로 볼 수있는 유일한 문제는 BeforeSelect 이벤트가 실제로 발사된다는 것입니다. ~ 후에 클릭 및 Mouseclick 이벤트.

또 다른 편집 : 클릭 전에 해고되는 이벤트가 필요한 경우 NodemouseClick -TreenodemouseClickeventargs에는 노드 속성이 있습니다.

다른 팁

그냥 사용하지 않는 이유는 무엇입니까? TreeView.SelectedNode?

노력하다:

TreeNode node = this.SelectedNode;

편집 : Sean이 펀치로 구타

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top