Компонент Dock Panel для .NET, который позволяет выполнять стыковку внутри вкладок?

Я хочу создать пользовательский интерфейс, который по историческим причинам имеет много "столбцов" информации. Многие из них не актуальны для всех пользователей во всех случаях, поэтому я подумал, что я бы посмотрел на панели док-станции, чтобы позволить пользователям скрыть или переупорядочить столбцы в соответствии со своим сценарием работы.

Это Winforms в .NET 3.5.

Как таковой, мне бы хотелось:

  • Имейте вкладки в основной форме
  • Каждая вкладка может иметь док-панели, прикрепленные к ним.
  • Док-панели должны перемещаться с одной вкладки на другую.

Пример макета http://images.vkarlsen.no/so/2902953/dock-test.png

Я уже пробовал следующие пакеты компонентов:

Telerik

Позволяет мне состыковаться на вкладке, но док-панели не могут перемещаться с одной вкладки на другую. При попытке сбросить плавающую панель на другую вкладку, чем та, с которой она появилась, кажется, что док-станция будет успешной, но когда она упадет, она состыкована с контейнером владельца.

Divelements SandDoc

Те же проблемы, что и у Telerik.

DevExpress XtraBars

Те же проблемы, что и у Telerik.

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

Такая же проблема, окно содержимого док-станции может принадлежать только одной панели док-станции, что означает, что она не может мигрировать с одной вкладки на другую.


В принципе, знает ли кто-нибудь о таком компоненте (пакете), который позволил бы мне делать то, что я хочу?


Изменить: Хорошо, я попытался получить контроль над Sourceforge выше, но я не вижу, как это сделать.

В принципе, вот что мне нужно сделать:

  • Мне нужно иметь несколько вкладок (мне не нужно их отстыковывать, они могут быть статическими)
  • Мне нужно иметь возможность прикреплять содержимое на вкладках
  • Мне нужно иметь возможность перемещать содержимое с одной вкладки на другую

Если я понимаю ответ ниже, который упоминает этот элемент управления, я должен использовать DockPanel вместо TabControl и DockPane вместо TabPage, но, насколько я могу судить, это дает мне возможность состыковать и открепить вкладки, и это не то, что я хочу.

В любом случае, здесь файл программы, просто создайте проект Winforms, добавьте ссылку на .dll из проекта sourceforge и вставьте этот код в 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());
        }
    }
}

Ответ 1

Попробуйте this.

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;

Ответ 2

Попробуйте Devcomponents.com

Ответ 3

Попробуйте сделать следующее (мой образец telerik):

  • Добавить DockingManager из панели инструментов
  • В коде выполните следующие действия:

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

Ответ 4

В .Net вы программно переместите элемент управления (DockPanel) из одного контейнера управления (Tab) в другой. Выполняя это с помощью функции перетаскивания.