Ich habe ein Windows Forms ToolStripPanel, dem ich dynamisch neue ToolStrips hinzufüge. Jeder ToolStrip hat ToolStripItems, die ich dynamisch hinzufüge (meistens ToolStripButtons).Ändern des ToolStripPanel-Überlaufverhaltens für dynamisch hinzugefügte ToolStripItems
Ich möchte, dass alle ToolStrips in eine Zeile passen, solange Sie alle ToolStripItems in jedem ToolStrip sehen können. Wenn das Hinzufügen eines neuen ToolStripItem zu einem ToolStrip zu einem Überlauf führt, möchte ich, dass der ToolStrip am Ende der Zeile in eine neue Zeile springt. Das einzige Mal, wenn ich den Overflow-Button sehen möchte, ist, dass der ToolStrip so viele Elemente enthält, dass sie nicht in die Breite des Formulars passen.
Ich möchte, dass dies das Standardverhalten ist, es sei denn, ein Benutzer bewegt einen ToolStrip manuell. Wenn der Benutzer den ToolStrip verschiebt, möchte ich, dass das vorhandene Überlaufverhalten (z. B. Überlaufschaltfläche mit Dropdownoptionen) auftritt. Ich nehme an, dass der Benutzer mit diesem standardmäßigen Winforms-Überlaufverhalten einverstanden ist, wenn er die Symbolleiste selbst positioniert.
Wenn eine neue dynamische Symbolleiste hinzugefügt wird, nachdem der Benutzer Dinge neu positioniert hat, möchte ich, dass die neue Symbolleiste rechts vom letzten ToolStrip in der unteren Zeile hinzugefügt wird. Diese Symbolleiste sollte das aktualisierte Überlaufverhalten aufweisen (z. B. eine neue Zeile verwenden, wenn Sie nicht passen können), bis der Benutzer sie manuell neu positioniert.
Ich habe einige der Forschung ohne großen Erfolg getan:
- Dies scheint, wie es eine einfache Sache, eine ToolStripLayoutStyle zu ändern sein sollte, aber dies scheint nicht der Fall zu sein. (Im besten Fall werden neue Zeilen erstellt, wenn die Überlaufschaltfläche auf allen ToolStrips in einer bestimmten Zeile angezeigt wird).
- Der MSDN-Artikel "How to: Manage ToolStrip Overflow in Windows Forms" scheint nur abzudecken, wenn/wann die Überlauf-Schaltfläche auftritt.
- Es gibt ein LayoutCompleted Ereignis auf dem ToolStrip, das möglich scheint, um Dinge zu optimieren, es scheint, als sollte es einen einfacheren Weg geben.
- Creating a custom LayoutEngine scheint wie ein Overkill für diese, da die eingebaute ist sehr nah an dem, was ich tun möchte.
Fehle ich eine einfache Lösung?
UPDATE: Immer noch auf der Suche nach einer guten Lösung. Es scheint, dass die LayoutCompleted-Route möglich ist. Das Problem dabei ist, dass es mehrmals aufgerufen wird. Einmal heißt es, das ToolStripItem befinde sich im Überlaufbereich und unmittelbar danach im Hauptbereich, daher scheint es nicht sicher zu sein, nur einmal zu überprüfen, ob es sich im Überlauf befindet.