用于.NET的Dock Panel组件,允许在选项卡页面内对接?

时间:2010-05-25 08:02:01

标签: .net components tabpage dockpanel tabpanel

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

这是.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. 我需要能够将内容从一个标签页移动到另一个标签页
  4. 如果我理解下面的答案提到这个控件,我应该使用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());
            }
        }
    }
    

4 个答案:

答案 0 :(得分:6)

尝试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;

答案 1 :(得分:1)

试试Devcomponents.com

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-1)

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