在.NET中允许将面板停靠在选项卡页面内的Dock Panel组件是什么?

11
我想构建一个用户界面,由于历史原因,有很多信息的“列”。其中许多在所有情况下都不适用于所有用户,因此我想研究停靠面板,以允许用户根据其工作场景隐藏或重新排列列。
这是.NET 3.5中的Winforms。
因此,我希望以下内容:
- 在主窗体中有选项卡页 - 每个选项卡页可以有停靠面板停靠到其中 - 停靠面板应该可以从一个选项卡页移动到另一个选项卡页 示例模型 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项目,添加对源代码项目中.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());
        }
    }
}

你最终解决了这个问题吗?我遇到了非常类似的问题,我需要你所需的一切,除了从选项卡到选项卡的移动... 另外,选项卡必须保持静态。 - hrh
是否有完整源代码的最终解决方案? - Kiquenet
4个回答

6

尝试使用这个

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

编辑

如果可能的话,您可以尝试使用DockPane替代标签页。 DockPane将允许您将元素从一个窗格移动到另一个窗格。

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

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

它有同样的问题,停靠面板属于单个停靠目标,无法从一个选项卡迁移到另一个选项卡。 - Lasse V. Karlsen
我会尝试使用 DockPanes 而不是选项卡。 - Lasse V. Karlsen
我还是不明白如何让它工作,我将编辑我的问题并附上一些测试程序的源代码,你能看一下并找出我的错误吗? - Lasse V. Karlsen

1

试试 Devcomponents.com


0

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

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

    DockPanel dockPanel = new DockPanel();
    dockPanel.Text = "My Panel";
    dockPanel.Dock = DockStyle.Fill;
    //将Dock Panel添加到管理器
    dockingManager1.SetDocument(addProdDockPanel);


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

1
实际上,阅读问题是有帮助的。 .NET没有内置 dock 面板,问题是是否有任何第三方控件允许这种情况。我的问题基本上是“是否有人知道任何第三方控件可以做到这一点”,而你的答案基本上是“只需这样做”。 - Lasse V. Karlsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接