Я хочу создать пользовательский интерфейс, который по историческим причинам содержит много «столбцов» информации. Многие из них актуальны не для всех пользователей во всех случаях, поэтому я подумал, что я бы посмотрел на панели док-станции, чтобы позволить пользователям скрывать или переставлять столбцы в соответствии со сценарием их работы.
Это 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());
}
}
}