【问题标题】:how to get the index of current selected node from treeview in c#如何从c#中的treeview获取当前选定节点的索引
【发布时间】:2016-11-17 14:10:53
【问题描述】:

我正在使用 c# 编写一个包含 TreeView 的表单应用程序。我想要做的是将面板附加到每个节点,这样每当用户单击节点时,面板就会根据所选节点进行更新。
我面临的问题是,当我选择一个节点时,应用程序什么也不做,但当我选择另一个节点时,应用程序会显示与先前选择的节点相关的内容。意味着 App 总是获取与最后选择的节点相关的内容,而不是当前节点。例如,如果我选择“文本”节点,标签将不显示任何内容,之后如果我选择其他节点,如“外观”,标签将显示“文本”,这是最后选择的节点。

以下是包含 TreeView 的表单的图像。
出于测试目的,我只是将所选节点的值存储在标签的文本中 这是代码。

public partial class TextEditor_Preferences : Form
{
    public TextEditor_Preferences()
    {
        InitializeComponent();

    }
    List<Panel> myPanels = new List<Panel>(); //Ignore this line of code !

    private void SideBar_MouseClick(object sender, MouseEventArgs e)
    {
        label1.Text = SideBar.SelectedNode.ToString();
    }
}

有人可以建议我一种方法吗?
如果我遗漏了什么或问题无效,请明确告诉我。谢谢

【问题讨论】:

  • MouseClick 事件可能发生在树中的选择更改之前,因此在您单击时它仍然具有标记为“已选择”的旧值。尝试注册另一个事件,可能是 SelectionChanged 或类似的东西。

标签: c# treeview


【解决方案1】:

TreeView 控件具有 AfterSelect 事件,您应该在该处理程序中编写代码。

public YourForm()
{
    InitializeComponent();
    treeView.AfterSelect += TreeViewAfterSelect;
}

private void TreeViewAfterSelect(object sender, TreeViewEventArgs e)
{
    string nodeText = treeView.SelectedNode.Text;

    // Update the panel here accordingly
}

【讨论】:

    【解决方案2】:

    也许尝试使用 AfterSelect 事件而不是 MouseClick。例如

    private void Sidebar_AfterSelect(object sender, TreeViewEventArgs e)
    {
        label1.Text = e.Node.Text;
    }
    

    【讨论】:

    • 谢谢。这也有效,但我更喜欢上面的那个。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多