【问题标题】:Dock Panel component for .NET that allows docking inside tab-pages?.NET 的 Dock Panel 组件允许停靠在标签页内?
【发布时间】:2011-02-23 13:57:48
【问题描述】:

我想建立一个用户界面,由于历史原因,它有很多“列”的信息。其中许多并非在所有情况下都与所有用户相关,所以我想我会查看停靠面板以允许用户根据他们的工作场景隐藏或重新排列列。

这是 .NET 3.5 中的 Winforms。

因此,我想要以下内容:

  • 在主窗体中有标签页
  • 每个标签页都可以停靠停靠面板
  • 停靠面板应该可以从一个标签页移动到另一个标签页

Example mockup http://images.vkarlsen.no/so/2902953/dock-test.png

到目前为止,我已经尝试了以下组件包,但没有成功:

Telerik

允许我停靠在标签页内,但停靠面板不能从一个标签页移动到另一个。当尝试将浮动面板拖放到与其来源不同的标签页时,停靠似乎会成功,但在拖放时它停靠在其所有者容器上。

Divelements SandDoc

与 Telerik 的问题相同。

DevExpress XtraBars

与 Telerik 的问题相同。

http://sourceforge.net/projects/dockpanelsuite/

同样的问题,一个停靠内容窗口只能属于一个停靠面板,这意味着它不能从一个选项卡迁移到另一个选项卡。


基本上,有没有人知道任何这样的组件(包)可以让我做我想做的事?


编辑:好的,我已经尝试让上面的 Sourceforge 控件正常工作,但我不知道如何使其工作。

基本上,这是我需要做的:

  1. 我需要有多个标签页(我不需要取消停靠,它们可以是静态的)
  2. 我需要能够将内容停靠到标签页中
  3. 我需要能够将内容从一个标签页移动到另一个标签页

如果我理解下面提到此控件的答案,我应该使用 DockPanel 而不是 TabControl,并使用 DockPane 而不是 TabPage,但据我所知,这只使我能够停靠和取消停靠标签页,这不是我想要的。

不管怎样,这是一个程序文件,只需创建一个 Winforms 项目,从 sourceforge 项目中添加对 .dll 的引用并将这段代码粘贴到 Program.cs 中:

using System;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;

namespace DockTest
{
    public class DockWindow1 : DockContent
    {
        public DockWindow1()
        {
            TabText = "Dock-window #1";

            DockPanel panel = new DockPanel();
            panel.Dock = DockStyle.Fill;
            Controls.Add(panel);

            // tried this related to the exceptions
            // this.DockPanel = panel;
        }
    }

    public class DockWindow2 : DockContent
    {
        public DockWindow2()
        {
            TabText = "Dock-window #2";

            ListBox lb = new ListBox();
            Controls.Add(lb);
            lb.Dock = DockStyle.Fill;
            lb.Items.Add("Listbox");
        }
    }

    public class MainForm : Form
    {
        public MainForm()
        {
            DockPanel panel = new DockPanel();
            panel.Dock = DockStyle.Fill;
            panel.DocumentStyle = DocumentStyle.DockingWindow;
            Controls.Add(panel);

            // exceptions here
            DockPane dp = panel.DockPaneFactory.CreateDockPane(
                new DockWindow1(), DockState.Document, true);
            dp.AllowDockDragAndDrop = true;
            dp.AllowDrop = true;

            DockWindow1 w1 = new DockWindow1();
            w1.Show(panel);

            DockWindow2 w2 = new DockWindow2();
            w2.Show(panel);
        }
    }

    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.Run(new MainForm());
        }
    }
}

【问题讨论】:

  • 你有想过这个吗?我有一个非常相似的问题,除了从一个标签移动到另一个标签之外,我需要你需要的一切。而且标签必须保持静态
  • 有完整源代码的最终解决方案吗?

标签: .net components tabpage dockpanel tabpanel


【解决方案1】:

尝试执行以下操作(我的 Telerik 示例):

  1. 从工具箱添加 DockingManager
  2. 在代码隐藏中执行以下操作:

    DockPanel dockPanel = new DockPanel();
    dockPanel.Text = "My Panel";
    dockPanel.Dock = DockStyle.Fill;
    //Add Dock Panel To Manager
    dockingManager1.SetDocument(addProdDockPanel);

【讨论】:

    【解决方案2】:

    在 .Net 中,您可以以编程方式将控件 (DockPanel) 从一个控件容器 (Tab) 移动到另一个。使用拖放功能完成此操作。

    【讨论】:

    • 这实际上有助于阅读问题。 .NET 中没有内置停靠面板,问题是是否有任何第三方控件允许该场景。我的问题基本上是“有人知道这样做的任何第三方控件吗”,而您的回答基本上是“就这样做”。
    【解决方案3】:

    试试 Devcomponents.com

    【讨论】:

      【解决方案4】:

      试试this

      http://sourceforge.net/projects/dockpanelsuite/

      编辑

      如果可能,您可以尝试使用 DockPane 而不是 Tabs。 DockPane 可让您将元素从一个窗格移动到另一个窗格。

      1.DockPanel 替换 TabControl
      2.DockPane替换TabPages

      DockPane dp = dockPanel.DockPaneFactory.CreateDockPane(new DockForm(), DockState.Document, true);
      dp.AllowDockDragAndDrop = true;
      dp.AllowDrop = true;
      

      【讨论】:

      • 同样的问题,停靠面板属于单个停靠目标,无法从一个选项卡迁移到另一个选项卡。
      • 我会尝试停靠窗格而不是选项卡。
      • 我仍然不明白如何才能让它工作,我将用一些测试程序的源代码编辑我的问题,你能看看你是否发现我的错误?
      猜你喜欢
      • 1970-01-01
      • 2011-11-04
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多