web-dev-qa-db-ja.com

パネルWinFormにエキスパンダー(折りたたみ/展開)を追加します。

フォームの下部にDataGridViewと3つのボタンを含むパネルがあります。このパネルを展開したり折りたたんだりする可能性を追加します。 Windows Formsアプリケーションでそれを行う方法はありますか?

誰かが似たようなことをしましたか?

25
aleroot

別のWinForms Expanderがあります: http://jfblier.wordpress.com/2011/02/16/window-form-expander/

11
Jack

SplitContainerコントロールには、2つのパネルのいずれかを折りたたむ機能があります。ボタンをPanel1Collapsedプロパティにリグできます。

40
Bradley Smith

WinFormエキスパンダーコントロールをご覧ください- https://github.com/alexander-makarov/ExpandCollapsePanel

一般に、この種の制御のすべての基本的な要件を満たす必要があります。

  • フォームデザイナでの簡単な編集
  • 必要なコントロールをコンテンツ領域に配置します
  • さまざまなスタイルとサイズを適用する

Easy editing in Form Designer

20

SplitContainer collapseを使用する代わりに:

パネルを目的の場所にドッキングし、Visibleプロパティを変更して表示/非表示を切り替えます。このように、他のドッキングされたアイテムは、(Dock設定に応じて)見えないときにスペースを埋めるように移動します。

たとえば、パネルを非表示にしたときにボタン、パネル、ラベルがすべて最上部にドッキングされている場合、ラベルはボタンの下に移動します。

4
noelicus

"SplitContainer"を機能させることができませんでした(詳細を覚えていないが、問題があります)なので、今日はこの関数を手動で実行しました。コントロールを折りたたむには、"the_sz"として負の引数を渡します。

    /// <summary>
    /// (In|De)creases a height of the «control» and the window «form», and moves accordingly
    /// down or up elements in the «move_list». To decrease size pass a negative argument
    /// to «the_sz».
    /// Usually used to collapse (or expand) elements of a form, and to move controls of the
    /// «move_list» down to fill the appeared gap.
    /// </summary>
    /// <param name="control">control to collapse/expand</param>
    /// <param name="form">form to get resized accordingly after the size of a control
    /// changed (pass «null» if you don't want to)</param>
    /// <param name="move_list">A list of controls that should also be moved up or down to
    /// «the_sz» size (e.g. to fill a gap after the «control» collapsed)</param>
    /// <param name="the_sz">size to change the control, form, and the «move_list»</param>
    public static void ToggleControlY(Control control, Form form, List<Control> move_list, int the_sz)
    {
        //→ Change sz of ctrl
        control.Height += the_sz;
        //→ Change sz of Wind
        if (form != null)
            form.Height += the_sz;
        //*** We leaved a gap(or intersected with another controls) now!
        //→ So, move up/down a list of a controls
        foreach (Control ctrl in move_list)
        {
            Point loc = ctrl.Location;
            loc.Y += the_sz;
            ctrl.Location = loc;
        }
    }

GroupBoxにラベルを付け、この関数をラベルの"onClick"イベントに追加しました。また、ユーザーにとって拡張機能をより明確にするために、テキストの最初に

0
Hi-Angel