Компонент Dock Panel для .NET, который позволяет закреплять внутри вкладок? - PullRequest
11 голосов
/ 25 мая 2010

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

Это 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 выше, но я не вижу, как заставить это работать.

По сути, вот что мне нужно сделать:

  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());
        }
    }
}

Ответы [ 4 ]

6 голосов
/ 25 мая 2010

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

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

EDIT

Вы можете попробовать DockPane вместо вкладок , если это вообще возможно. DockPane позволит вам перемещать элементы с одной панели на другую.

1. DockPanel заменяет TabControl
2. DockPane заменяет TabPages

DockPane dp = dockPanel.DockPaneFactory.CreateDockPane(new DockForm(), DockState.Document, true);
dp.AllowDockDragAndDrop = true;
dp.AllowDrop = true;
1 голос
/ 25 мая 2010

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

0 голосов
/ 06 октября 2011

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

0 голосов
/ 29 июля 2010

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

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

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

...