3

まず、現在の UI がどのように見えるかを少し概説します。

現在の UI

ToolStripControlHost 内のもの以外は、すべて標準の WinForms であることに注意してください。

要するに、ToolStripControlHost に似たものが必要ですが、メニューの一番下に「固定」する必要があります。ほとんどの場合、多くの項目がある場合、残りのメニュー項目のようにスクロールされません。

いろいろ調べた結果、ペイントをカスタマイズすることが解決策かもしれないという結論に達しましたが、これが当てはまるかどうかはわかりません.

以下にサンプルコードを示しますが、それがどれほど役立つかはわかりません。

public ToolStripDropDownButtonContainer(ToolStripDropDownButton button)
{
    this.UIControl = button.GetCurrentParent();
    this.Button = button;

    if (this.Button.Tag == null)
    {
        this.Button.Tag = true;

        this.Button.DropDownDirection = ToolStripDropDownDirection.AboveLeft;
        ToolStripDropDownMenu menu = (ToolStripDropDownMenu)this.Button.DropDown;

        menu.SuspendLayout();
        try
        {
            menu.BackColor = Color.White;
            menu.ShowImageMargin = false;
            menu.ShowCheckMargin = false;
            menu.AutoSize = true;
            menu.Margin = Padding.Empty;
            menu.Padding = Padding.Empty;
            menu.GripMargin = Padding.Empty;
            menu.GripStyle = ToolStripGripStyle.Hidden;
            menu.MinimumSize = new Size(310, 0);
            menu.MaximumSize = menu.MinimumSize;
            // TODO pin panel (or some control) to the bottom-side of the menu
        }
        finally
        {
            menu.ResumeLayout();
        }
    }
}
4

1 に答える 1

3

この問題に対する私の解決策は、通常のメニュー コントロール コンテインメント システムの使用を完全に避け、FlowLayoutPanel代わりにメニュー項目を含むメニューを表示することです。

これには、パネルが UI で適切に動作するように、いくつかのさまざまなトリックを追加する必要がありました。このアプローチの追加の利点は、システムの柔軟性と制御が向上することです。

マイナス面として、大量のサブアイテムがあるとパフォーマンスが低下することに気付きましたが、これについては個別に調査します.

于 2015-01-03T16:22:03.517 に答える