【发布时间】:2011-03-31 14:23:26
【问题描述】:
是否可以在 Visual Studio 中创建类似于下图的树视图:
ROOT 、 CHILD 和 Sub-Child ,这三个都是 LinkLabels ,点击它们会打开一个新的表单。
【问题讨论】:
-
我建议你看看一些 3rd-party 组件,例如DevExpress.
标签: c# .net winforms treeview customization
是否可以在 Visual Studio 中创建类似于下图的树视图:
ROOT 、 CHILD 和 Sub-Child ,这三个都是 LinkLabels ,点击它们会打开一个新的表单。
【问题讨论】:
标签: c# .net winforms treeview customization
您也可以尝试将 WPF 用户控件嵌入 WinForm。自定义 WinForms 并非易事。在 WPF 中,你可以更容易地做到这一点。
【讨论】:
您也可以为树形视图激活Hot tracking,然后处理NodeMouseClick 事件。
【讨论】:
这在 Winforms 中是不实用的,每个 Control 都有一个与之关联的本地 Windows 窗口。一个窗口是一个非常昂贵的操作系统对象,创建超过 50 个窗口,由于绘制控件所涉及的开销量,您的用户界面将明显开始拖动。通过嵌套控件,您可以很快达到实际上限。
您可以通过使用 TreeView 的 DrawMode 属性和 DrawNode 事件来自定义 TreeView 的外观。 TreeView.DrawNode 的 MSDN 库文章有一个不错的示例。它也是第 3 方组件供应商集合中流行的组件类型。他们在他们的版本中添加了许多花里胡哨。
【讨论】:
所以,人们不喜欢这样做。
但是,答案是肯定的,你可以。
TreeView treeView1;
void Initialize_It() {
treeView1 = new TreeView();
treeView1.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect);
TreeNode Root = treeView1.Nodes.Add("ROOT");
TreeNode Child = Root.Nodes.Add("CHILD");
TreeNode SubChild = Child.Nodes.Add("Sub-Child");
}
void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
const string FORMAT = "{0} Node Selected. Call your Windows Form from here.";
if (e.Node.Level == 0) {
MessageBox.Show(string.Format(FORMAT, e.Node.Text), e.Node.Text);
} else if (e.Node.Level == 1) {
MessageBox.Show(string.Format(FORMAT, e.Node.Text), e.Node.Text);
} else if (e.Node.Level == 2) {
MessageBox.Show(string.Format(FORMAT, e.Node.Text), e.Node.Text);
}
}
【讨论】: