新しい ToolStrips を動的に追加する Windows フォーム ToolStripPanel があります。各 ToolStrip には、動的に追加する ToolStripItems (主に ToolStripButtons) があります。
各 ToolStrip にすべての ToolStripItem が表示される限り、すべての ToolStrip を 1 行に収めたいと思います。新しい ToolStripItem を ToolStrip に追加するとオーバーフローが発生する場合、行の最後にある ToolStrip を新しい行にジャンプさせたいと思います。オーバーフロー ボタンを表示したいのは、ToolStrip に項目が多すぎてフォームの幅に収まらない場合だけです。
ユーザーが手動で ToolStrip を移動しない限り、これをデフォルトの動作にしたいと考えています。ユーザーが ToolStrip を移動した場合、既存のオーバーフロー (ドロップダウンの選択肢があるオーバーフロー ボタンなど) の動作が発生するようにします。ツールバーを自分で配置すれば、ユーザーはこのデフォルトの Winforms オーバーフロー動作で問題ないと思います。
ユーザーが物を再配置した後に新しい動的ツールバーが追加された場合、新しいツールバーを一番下の行の最後の ToolStrip の右側に追加したいと思います。このツールバーは、ユーザーが手動で再配置するまで、更新されたオーバーフロー動作 (収まらない場合は新しい行を使用するなど) を持つ必要があります。
私は大きな成功を収めずにいくつかの研究を行いました:
- これは、 ToolStripLayoutStyleを変更するだけの簡単な問題のようですが、そうではないようです。(せいぜい、特定の行のすべての ToolStrips にオーバーフロー ボタンが表示されている場合に、新しい行が作成されます)。
- MSDN の記事「方法: Windows フォームで ToolStrip オーバーフローを管理する」は、オーバーフロー ボタンが発生した場合のみをカバーしているようです。
- ToolStrip にはLayoutCompletedイベントがあり、微調整に使用できると思われますが、もっと簡単な方法があるはずです。
- カスタム LayoutEngine を作成することは、組み込みの LayoutEngine が私がやりたいことに非常に近いため、やり過ぎのように思えます。
簡単な解決策がありませんか?
更新:まだ良い解決策を探しています。LayoutCompleted ルートが可能のようです。ただし、問題は、複数回呼び出されることです。ToolStripItem がオーバーフロー エリアにあり、その直後にメイン エリアにあると表示されることがあるため、オーバーフローにあるかどうかを 1 回だけ確認するのは安全ではないようです。