我的WinForms UI中有一个TreeView,我想根据一系列单选按钮的选中状态与多个数据集共享。
我想做的是在代码中有一系列隐藏的TreeView对象,我可以将它们分配给可见的TreeView,并告诉UI刷新自己并显示新分配的TreeView。不幸的是,除非我手动添加节点,否则显示TreeView永远不会显示任何数据。我不想每次交换视图时都要不断地在树视图中复制节点,跟踪检查状态等。有没有一种简单的方法来做我想做的事?
TreeView visibleView = new TreeView(); //This is the tv exposed in the UI.
TreeView view1 = BuildTreeView(bDoSomething); //This method adds nodes to a treeview and returns it
TreeView view2 = BuildTreeView(bDoSomethingElse); //Similar to above, just slightly different.
//Depending on checked state, display different TreeView.
if(combobox1.Checked)
//This is a reference assignment.
//Why won't the visibleView just take on the form of view1?
visibleView = view1;
else
visibleView = view2;
//Tell UI to display the newly assigned view.
visibleView.Refresh();
根据需要显示和隐藏不同的TreeView
实例:
TreeView view1 = BuildTreeView(bDoSomething);
TreeView view2 = BuildTreeView(bDoSomethingElse);
//Depending on checked state, display different TreeView.
if(combobox1.Checked)
{
view1.Show();
view2.Hide();
}
else
{
view1.Hide();
view2.Show();
}
好吧,多亏了Neils的建议,我又回到了代码中,发现了我的错误。参考作业效果良好。新的树视图没有被显示,因为它没有被添加到应该显示它的面板的控件数组中。下面的代码现在对我有效。
this.panel1.Controls.Remove(visibleTreeView);
visibleTreeView = view1;
this.panel1.Controls.Add(visibleTreeView);
visibleTreeView.Dock = DockStyle.Fill;
visibleTreeView.Refresh();