歴史的な理由から、多くの情報の「列」を持つユーザー インターフェイスを構築したいと考えています。これらの多くは、すべてのケースですべてのユーザーに関連するわけではないため、ドック パネルを調べて、ユーザーがジョブ シナリオに従って列を非表示にしたり再配置したりできるようにすると考えました。
これは .NET 3.5 の Winforms です。
ということで、以下を希望します。
- メイン フォームにタブ ページを配置する
- 各タブページにはドックパネルをドッキングできます
- ドックパネルは、あるタブページから別のタブページに移動できる必要があります
モックアップの例 http://images.vkarlsen.no/so/2902953/dock-test.png
これまでのところ、次のコンポーネント パッケージを試しましたが、うまくいきませんでした。
テレリク
タブページ内にドッキングできますが、ドックパネルはあるタブページから別のタブページに移動できません。フローティング パネルを元のタブ ページとは別のタブ ページにドロップしようとすると、ドックは成功するように見えますが、ドロップするとオーナー コンテナーにドッキングされます。
Divelements SandDoc
Telerik と同じ問題。
DevExpress XtraBars
Telerik と同じ問題。
http://sourceforge.net/projects/dockpanelsuite/
同じ問題、ドック コンテンツ ウィンドウは 1 つのドック パネルにのみ属することができます。つまり、あるタブから別のタブに移行することはできません。
基本的に、私がやりたいことができるようなコンポーネント (パッケージ) を知っている人はいますか?
編集: OK、上記の Sourceforge コントロールを動作させようとしましたが、これを動作させる方法がわかりません。
基本的に、ここに私がしなければならないことがあります:
- 複数のタブページが必要です (これらをドッキング解除する必要はありません。静的にすることができます)
- コンテンツをタブページにドッキングできるようにする必要があります
- あるタブページから別のタブページにコンテンツを移動できるようにする必要があります
このコントロールに言及している以下の回答を理解した場合、TabControl の代わりに DockPanel を使用し、TabPage の代わりに DockPane を使用する必要がありますが、私が知る限り、これはタブページをドッキングおよびドッキング解除する機能のみを提供し、それはそうではありません私が欲しいもの。
とにかく、ここにプログラム ファイルがあります。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());
}
}
}