【问题标题】:customizing treeview in winforms在winforms中自定义树视图
【发布时间】:2011-03-31 14:23:26
【问题描述】:

是否可以在 Visual Studio 中创建类似于下图的树视图:

ROOT 、 CHILD 和 Sub-Child ,这三个都是 LinkLabels ,点击它们会打开一个新的表单。

【问题讨论】:

  • 我建议你看看一些 3rd-party 组件,例如DevExpress.

标签: c# .net winforms treeview customization


【解决方案1】:

您也可以尝试将 WPF 用户控件嵌入 WinForm。自定义 WinForms 并非易事。在 WPF 中,你可以更容易地做到这一点。

【讨论】:

    【解决方案2】:

    您也可以为树形视图激活Hot tracking,然后处理NodeMouseClick 事件。

    【讨论】:

      【解决方案3】:

      这在 Winforms 中是不实用的,每个 Control 都有一个与之关联的本地 Windows 窗口。一个窗口是一个非常昂贵的操作系统对象,创建超过 50 个窗口,由于绘制控件所涉及的开销量,您的用户界面将明显开始拖动。通过嵌套控件,您可以很快达到实际上限。

      您可以通过使用 TreeView 的 DrawMode 属性和 DrawNode 事件来自定义 TreeView 的外观。 TreeView.DrawNode 的 MSDN 库文章有一个不错的示例。它也是第 3 方组件供应商集合中流行的组件类型。他们在他们的版本中添加了许多花里胡哨。

      【讨论】:

        【解决方案4】:

        所以,人们不喜欢这样做。

        但是,答案是肯定的,你可以。

        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);
          }
        }
        

        【讨论】:

        • 我要求更改设计?
        • @sqlchild:我不明白。您是否尝试创建自己的 TreeView 控件?
        • 是的先生,设计应该和我在图表中显示的一样。
        • 在这种情况下,您将需要考虑设计一个自定义用户控件(不是初学者的主题,但 Google 搜索会提供大量相关信息)或购买第三方控件做你需要的......正如其他人所建议的那样。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        相关资源
        最近更新 更多