2011-01-03 3 views
3

Когда я использую событие MouseClick элемента управления TreeView, всегда выбирается первый узел в дереве. Что я должен сделать, чтобы получить текущий узел, выбранный пользователем? Я использую C#.Как получить текущий узел, выбранный в элементе управления TreeView?

Это код, я в настоящее время использую:

private void TVRecorder_MouseClick(object sender, MouseEventArgs e) 
{ 
    TreeNode selectedNode = TVRecorder.HitTest(e.Location).Node; 
    if (selectedNode != null) 
    { 
     if (selectedNode.SelectedImageKey == "Test_Space") 
     { 
      frmRepository rep = new frmRepository(); 
      string ssql = string.Empty; 
      rep.label1.Text = "Scenario-RepositoryDetails"; 
      rep.LoadAppSettings(); 
      SqlConnection con4 = new SqlConnection(); 

      con4.ConnectionString = "Data Source=" + rep.ScnServer + ";" + "initial catalog=" + rep.ScnDbName + ";" + "User Id=" + rep.ScnUserName + ";" + "Password=" + rep.ScnPwd; 
      try 
      { 
       con4.Open(); 
      } 
      catch 
      { 
       MessageBox.Show("Connection Failed"); 
      } 
      ssql = "scn_select_testplan_sp"; 
      SqlCommand cmd = new SqlCommand(ssql, con4); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@testspace_key", SqlDbType.Int); 
      cmd.Parameters["@testspace_key"].Value = testspace_key; 
      SqlDataReader _datareader = cmd.ExecuteReader(); 
      try 
      { 
       while (_datareader.Read()) 
       { 
        testplan_key = (int)_datareader["testplan_key"]; 
        testplan_desc = (string)_datareader["testplan_desc"]; 
        //selectedNode.Nodes[0].Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan"); 
        TVRecorder.Nodes[0].Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan"); 
        TVRecorder.Visible = true; 
        TVRecorder.HideSelection = false; 
       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 

     } 

Заранее спасибо ...

+0

'WPF' или' WinForms'? Поместите некоторый код. – decyclone

+0

это приложение для форм Windows .... – vikasse

ответ

5

Вы можете использовать HitTest method подвергаются управлением TreeView в сочетании с расположением мыши указатель, когда произошло событие MouseClick (e.Location), чтобы определить, какой узел был нажат (и поэтому будет отображаться в конце события). Например:

private void TreeView_MouseClick(object sender, MouseEventArgs e) 
{ 
    // Get the node that was clicked 
    TreeNode selectedNode = myTreeView.HitTest(e.Location).Node; 

    if (selectedNode != null) 
    { 
     // ... 
     // Do something with the selected node here... 
    } 
} 

Обратите внимание, что эти проверки кода, чтобы убедиться, что selectedNode не равно нулю, прежде чем делать что-нибудь еще с ним. Если пользователь нажал на то, что не узел, объект selectedNode, который извлекается методом HitTest, будет null.

Это, вероятно, не работает для вас сейчас, потому что вы пытаетесь использовать SelectedNode property элемента управления TreeView. Узел пока не был выбран, когда код в вашем методе обработчика событий MouseClick запущен - он будет выбран только после, который выполнил код. Использование вышеописанного метода позволит вам получить доступ к узлу, который в конечном итоге будет выбран более прямым.


EDIT относительно вашего обновления и комментарии ниже:

Это смотрит на меня, как простой исправить. Проблема возникает в этой строке кода:

TVRecorder.Nodes[0].Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan"); 

выше код добавляет новые узлы, как дети первого узла появляются в вашем TreeView. Вместо этого мне кажется, что вы хотите добавить их как дочерние элементы выбранного узла. Вы уже определили, что выбранный узел (см выше часть ответа), так что вам просто нужно изменить код, чтобы добавить новые узлы, как дети выбранного узла, например, так:

selectedNode.Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan"); 

Помните, что каждый узел (экземпляр TreeNode class) имеет Nodes property, который предоставляет TreeNodeCollection. В этой коллекции хранятся все дочерние узлы этого узла. MSDN, вероятно, объясняет это лучше, чем я могу:

Свойство Nodes может содержать коллекцию других TreeNode объектов. Каждый из узлов дерева [s] в коллекции имеет свойство Nodes, которое может содержать свои собственные TreeNodeCollection. Это вложение узлов может затруднить выполнение . Свойство FullPath упрощает работу с . Определите свое местоположение в дереве.

+0

Спасибо Code Grey ... но все же у меня есть проблема, теперь я могу получить выбранный узел, но когда я вставляю дочерний узел, дочерний узел вставлен в первый узел, а не в узле i selcted.Это код am использует .... – vikasse

+0

@vikasse: Пожалуйста, отредактируйте свой вопрос, чтобы опубликовать код, который вы используете, вместо добавления его в качестве комментария. Комментарии не получают выделение кода или разрывы строк! Никто не хочет это читать. ;-) –

+0

k ... я отредактировал мой вопрос ... – vikasse

Смежные вопросы