【发布时间】:2011-02-23 13:57:48
【问题描述】:
我想建立一个用户界面,由于历史原因,它有很多“列”的信息。其中许多并非在所有情况下都与所有用户相关,所以我想我会查看停靠面板以允许用户根据他们的工作场景隐藏或重新排列列。
这是 .NET 3.5 中的 Winforms。
因此,我想要以下内容:
- 在主窗体中有标签页
- 每个标签页都可以停靠停靠面板
- 停靠面板应该可以从一个标签页移动到另一个标签页
Example mockup 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 项目,从 sourceforge 项目中添加对 .dll 的引用并将这段代码粘贴到 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());
}
}
}
【问题讨论】:
-
你有想过这个吗?我有一个非常相似的问题,除了从一个标签移动到另一个标签之外,我需要你需要的一切。而且标签必须保持静态
-
有完整源代码的最终解决方案吗?
标签: .net components tabpage dockpanel tabpanel