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

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

Это Winforms в .NET 3.5.

Таким образом, я хотел бы следующее:

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

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

До сих пор я пробовал следующие пакеты компонентов без везения:

Телерик

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

Divelements SandDoc

Те же проблемы, что и с Телериком.

Экстрабары DevExpress

Те же проблемы, что и с Телериком.

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

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


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


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

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

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

Если я понимаю приведенный ниже ответ, в котором упоминается этот элемент управления, я должен использовать 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());
        }
    }
}

person Lasse V. Karlsen    schedule 25.05.2010    source источник
comment
ты когда-нибудь это понял? У меня очень похожая проблема, мне нужно все, что вам нужно, кроме перехода с вкладки на вкладку. Также вкладки ДОЛЖНЫ оставаться статичными.   -  person hrh    schedule 22.02.2012
comment
любое окончательное решение с полным исходным кодом?   -  person Kiquenet    schedule 27.02.2013


Ответы (4)


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

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;
person this. __curious_geek    schedule 25.05.2010
comment
У него та же проблема, панели стыковки принадлежат одной цели стыковки, не могут переходить с одной вкладки на другую. - person Lasse V. Karlsen; 25.05.2010
comment
Я попробую стыковочные панели вместо вкладок. - person Lasse V. Karlsen; 25.05.2010
comment
Я до сих пор не понимаю, как я могу заставить это работать, я отредактирую свой вопрос с некоторым исходным кодом для тестовой программы, можете ли вы взглянуть и посмотреть, заметите ли вы мою ошибку? - person Lasse V. Karlsen; 25.05.2010

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

person Pierreten    schedule 25.05.2010

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

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

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

person Raymond Fraikin    schedule 29.07.2010

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

person charless    schedule 06.10.2011
comment
Это действительно помогает прочитать вопрос. В .NET нет встроенных стыковочных панелей, вопрос заключался в том, есть ли какие-либо сторонние элементы управления, которые допускают сценарий. Мой вопрос был в основном «Знает ли кто-нибудь о каких-либо сторонних элементах управления, которые делают это, и ваш ответ в основном просто делает это». - person Lasse V. Karlsen; 06.10.2011