Я хочу создать пользовательский интерфейс, который по историческим причинам имеет много «столбцов» информации. Многие из них не имеют отношения ко всем пользователям во всех случаях, поэтому я решил рассмотреть стыковочные панели, чтобы пользователи могли скрывать или изменять порядок столбцов в соответствии со своим рабочим сценарием.
Это Winforms в .NET 3.5.
Таким образом, я хотел бы следующее:
- Наличие вкладок в главной форме
- Каждая вкладка может иметь прикрепленные к ней док-панели.
- Док-панели должны перемещаться с одной вкладки на другую.
http://images.vkarlsen.no/so/2902953/dock-test.png
До сих пор я пробовал следующие пакеты компонентов без везения:
Телерик
Позволяет мне закрепляться внутри вкладки, но стыковочные панели не могут перемещаться с одной вкладки на другую. При попытке поместить плавающую панель на другую вкладку, отличную от той, из которой она была получена, кажется, что док-станция пройдет успешно, но при удалении она пристыкуется к своему контейнеру-владельцу.
Divelements SandDoc
Те же проблемы, что и с Телериком.
Экстрабары DevExpress
Те же проблемы, что и с Телериком.
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());
}
}
}