11

歴史的な理由から、多くの情報の「列」を持つユーザー インターフェイスを構築したいと考えています。これらの多くは、すべてのケースですべてのユーザーに関連するわけではないため、ドック パネルを調べて、ユーザーがジョブ シナリオに従って列を非表示にしたり再配置したりできるようにすると考えました。

これは .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 コントロールを動作させようとしましたが、これを動作させる方法がわかりません。

基本的に、ここに私がしなければならないことがあります:

  1. 複数のタブページが必要です (これらをドッキング解除する必要はありません。静的にすることができます)
  2. コンテンツをタブページにドッキングできるようにする必要があります
  3. あるタブページから別のタブページにコンテンツを移動できるようにする必要があります

このコントロールに言及している以下の回答を理解した場合、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());
        }
    }
}
4

4 に答える 4

6

これを試してください。

http://sourceforge.net/projects/dockpanelsuite/

編集

可能であれば、タブの代わりに DockPane を試すことができます。DockPane を使用すると、あるペインから別のペインに要素を移動できます。

1.DockPanel は TabControl を置き換えます 2.DockPane
は TabPages を置き換えます

DockPane dp = dockPanel.DockPaneFactory.CreateDockPane(new DockForm(), DockState.Document, true);
dp.AllowDockDragAndDrop = true;
dp.AllowDrop = true;
于 2010-05-25T08:26:26.950 に答える
1

Devcomponents.com を試す

于 2010-05-25T13:48:29.837 に答える
0

次のことを試してください(私のtelerikサンプル):

  1. ツールボックスからDockingManagerを追加します
  2. コードビハインドで次のことを行います。

    DockPanel dockPanel = new DockPanel();
    dockPanel.Text = "My Panel";
    dockPanel.Dock = DockStyle.Fill;
    //Add Dock Panel To Manager
    dockingManager1.SetDocument(addProdDockPanel);

于 2010-07-29T12:11:04.187 に答える
-1

.Net では、コントロール (DockPanel) を 1 つのコントロール コンテナ (Tab) から別のコントロール コンテナ (Tab) にプログラムで移動します。ドラッグ アンド ドロップ機能を使用してこれを実現します。

于 2011-10-06T02:36:58.973 に答える