используя treeview, щелкните событие на узлах treeview - PullRequest
0 голосов
/ 29 марта 2011

Я пытаюсь открыть форму, когда нажимается дочерний узел или родительский узел дерева:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    TreeNode head = new TreeNode("HEAD");

    TreeNode member = new TreeNode("MEMBER ");

    TreeNode submember = new TreeNode("SUB-MEMBER");

    private void Form1_Load(object sender, EventArgs e)
    {
        head.Nodes.Add(member);
        member.Nodes.Add(submember);

        treeView1.Nodes.Add(head);
        treeView1.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect);

    }

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
           if (treeView1.SelectedNode == member)
              {
                  MemberForm mf = new MemberForm();
                  mf.ShowDialog(); 
              }

           if (treeView1.SelectedNode == head)
              {
                  HeadForm hf = new HeadForm();
                  hf.ShowDialog(); 
              }

           if (treeView1.SelectedNode == submember)
              {
                  SubMemberForm sf = new SubMemberForm();  //is this way of checking that which node is clicked efficient???
                  sf.ShowDialog(); 
              }
    }

}

Ответы [ 2 ]

4 голосов
/ 29 марта 2011

Пока у вас есть только три узла в вашем дереве, это может быть эффективно. Однако для этого потребуется написать дополнительный оператор if для каждого нового добавляемого вами узла. Если вы пытаетесь различить глубину узла, вам лучше использовать свойство Level.

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
       if (treeView1.SelectedNode.Level == 0)
          {
              HeadForm hf = new HeadForm();
              hf.ShowDialog(); 
          }
       else if (treeView1.SelectedNode.Level == 1)
          {
              MemberForm mf = new MemberForm();
              mf.ShowDialog(); 
          }

       else if (treeView1.SelectedNode.Level == 2)
          {
              SubMemberForm sf = new SubMemberForm();
              sf.ShowDialog(); 
          }
}
0 голосов
/ 29 марта 2011

Это может быть немного хакерским и оскорбительным для функции тегов, но вы можете сделать что-то вроде этого:

TreeNode Head = new TreeNode("Head");
Head.Tag = typeof(HeadForm);

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
  Form toOpen = Activator.CreateInstance((Type)treeView1.SelectedNode.Tag) as Form;

  if(toOpen != null)
    toOpen.ShowDialog();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...