vik*_*sse 3 .net c# treeview treenode winforms
当我使用MouseClick树视图控件的事件时,总是选择树中的第一个节点.我该怎么做才能让用户选择当前节点?我正在使用C#.
这是我目前使用的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢...
当事件发生时,您可以将控件公开的HitTest方法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...
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,上面的代码检查以确保selectedNode在执行任何其他操作之前它不为null.如果用户单击了不是节点的内容,则selectedNode该HitTest方法将检索的对象将是null.
它可能不是现在的工作适合你,因为你试图使用SelectedNode财产的的TreeView控制.当MouseClick事件处理程序方法中的代码正在运行时,尚未选择该节点- 只有在执行该代码后才会选择该节点.使用上面的方法将允许您进入最终将被更直接选择的节点.
编辑有关您的更新和评论如下:
这对我来说就像一个简单的修复.问题出现在代码的这一行:
TVRecorder.Nodes[0].Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan");
Run Code Online (Sandbox Code Playgroud)
上面的代码将新节点添加为出现在您的第一个节点的子节点TreeView.相反,在我看来,您希望将它们添加为所选节点的子项.您已经确定了所选节点的内容(请参阅上面的部分答案),因此您只需修改代码即可将新节点添加为所选节点的子节点,如下所示:
selectedNode.Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan");
Run Code Online (Sandbox Code Playgroud)
请记住,每个节点(TreeNode类的一个实例)都有一个公开的Nodes属性TreeNodeCollection.此集合包含该节点的所有子节点.MSDN可能比我能更好地解释这个:
该
Nodes属性可以包含其他TreeNode对象的集合.集合中的每个树节点都有一个Nodes可以包含它自己的属性TreeNodeCollection.树节点的这种嵌套可能使得难以导航树结构.该FullPath属性使您可以更轻松地确定树中的位置.
| 归档时间: |
|
| 查看次数: |
19036 次 |
| 最近记录: |