我在C#中的一个Form(System.Windows.Forms)上放置了一个toolStrip1,并为其添加了五个toolStrip按钮。现在我想知道如何让用户通过将它们拖动到toolStrip1中的其他位置来重新排序这些按钮。我在文章中建议将 toolStrip1.AllowItemReorder设置为true 并将 AllowDrop设置为false 。
现在将启用toolStrip1中的项目重新排序的自动处理。但它不起作用 - 只有按住ALT-Key,toolStrip1才会对用户的重新排序尝试做出反应。 我是否真的要自己处理 DragEvent,DragEnter,DragLeave 以避免在重新排序项目时按住Alt键?
如果是这样的话,请举例说明如果我想在toolStrip1中的一个不同位置拖动一个项目而不保留任何ALT键(如Internet Explorer收藏夹那样),这个事件在带有toolStripButtons的toolStrip上会是什么样子)。我对此事没有经验。
答案 0 :(得分:2)
好吧,你可能不得不使用这个有点hacky的解决方案。整个想法是你必须按代码按住 Alt 键。我尝试使用MouseDown
事件(即使在PreFilterMessage handler
中),但它失败了。唯一的事件适用于在 Alt 键被触发时按住MouseEnter
。您必须为所有MouseEnter
注册ToolStripItems
事件处理程序,当鼠标离开其中一个项目时,您必须在{{1}中释放 Alt 键事件处理程序。释放 Alt 键之后,我们必须发送MouseLeave
键以激活表单(否则,所有悬停效果似乎都会被忽略,即使在包含{{的控制按钮上也是如此1}})。这是有效的代码:
ESC