Comment puis-je obtenir de l'actuel nœud sélectionné dans un contrôle TreeView?
Lorsque j'utilise le MouseClick
cas d'un contrôle treeview toujours le premier nœud de l'arbre est sélectionné. Que dois-je faire pour obtenir le nœud sélectionné par l'utilisateur? Je suis à l'aide de C#.
C'est le code que j'utilise actuellement:
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;
}
}
Merci d'avance...
WPF
ou WinForms
? Mettre un peu de code.c'est une application windows form....
OriginalL'auteur vikasse | 2011-01-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
HitTest
méthode exposés par leTreeView
de contrôle en collaboration avec l'emplacement du pointeur de la souris lorsque leMouseClick
événement s'est produit (e.Emplacement
) pour déterminer le nœud qui a été cliqué (et donc apparaître sélectionnés à l'issue de l'événement). Par exemple:Avis que le code ci-dessus vérifie que le
selectedNode
n'est pas null avant de faire autre chose avec elle. Si l'utilisateur a cliqué sur quelque chose qui est pas un noeud, leselectedNode
objet qui est récupérée par laHitTest
méthode seranull
.Ce n'est probablement pas travailler pour vous maintenant, parce que vous essayez d'utiliser la
SelectedNode
de la propriété de laTreeView
de contrôle. Le nœud n'a pas encore été sélectionné lorsque le code dans votreMouseClick
méthode de gestionnaire d'événements est en marche—il va seulement être sélectionné après que le code est exécuté. À l'aide de la méthode ci-dessus au lieu de cela vous permettra d'obtenir le nœud qui sera finalement retenue plus directement.MODIFIER concernant la mise à jour et commentaires ci-dessous:
Cela me semble une solution simple. Le problème se produit dans cette ligne de code:
Le code ci-dessus ajoute les nouveaux nœuds enfants du premier nœud qui apparaît dans votre
TreeView
. Au lieu de cela, il me semble que vous souhaitez ajouter en tant qu'enfants du nœud sélectionné. Vous avez déjà déterminé ce que le nœud sélectionné (voir ci-dessus partie de la réponse), donc vous avez juste besoin de modifier votre code pour ajouter les nouveaux nœuds enfants du nœud sélectionné, comme suit:Rappelez-vous que chaque noeud (une instance de la
TreeNode
de la classe) a unNœuds
de la propriété qui expose uneTreeNodeCollection
. Cette collection contient tous que les nœuds enfants du nœud. MSDN explique probablement mieux que je peux:Merci d'éditer votre question à poste le code que vous utilisez, plutôt que d'ajouter un commentaire. Les commentaires ne pas obtenir de la mise en valeur du code ou des sauts de ligne! Personne ne veut lire que. 😉
k ... j'ai édité ma question ...
J'ai mis à jour ma réponse. Mes yeux type de vitrage sur toutes les try-catch la gestion des exceptions dans votre code, mais je pense que cela correspond à ce que vous essayez de faire.
merci code gray cela fonctionne pour moi maintenant
OriginalL'auteur Cody Gray