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