我有一个MDI应用程序,允许我打开不同类型的子窗口。我可以打开同一类型的子窗口的多个(但不同的)实例。 (例如:我可以打开3个子窗口类型A实例和2个子窗口类型B实例。所有5个窗口都是不同的实体,除非用户将相同的数据显式拖放到多个窗口上,否则不会共享数据。)每个子窗口有一个ToolStripContainer和一个或多个ToolStrips。我该如何预防:如何防止ToolStrip在另一个ToolStripContainer中停靠?
- 用户将ToolStrip从类型A的子窗口拖动到类型为B的子窗口中的ToolStripContainer?
- 用户将ToolStrip从一个子窗口A的实例拖动到另一个相同类型窗口的实例中的ToolStripContainer?
我试图阻止用户从类型A的实例1拖动ToolStrip到类型A的实例2,选择实例2上的一些东西,然后单击工具栏上的某个按钮以获得一些东西奇怪发生在其他窗口。同样,将ToolStrip从类型A的窗口拖到类型B的窗口也没有任何意义 - 这些操作不适用于该类型,但对用户来说,它看起来像一切都很好,因为我让它们执行拖动。
就像为ControlAdded事件添加我自己的处理程序一样简单,还是有更好的方法来做到这一点?我在.NET 3.0中使用WinForms。
编辑:重现步骤
- 创建一个新的Windows应用程序项目。
- 添加一个新的用户控件。使用一个按钮为控件提供一个ToolStripContainer,其中包含一个ToolStrip。
- 重复第2步,给你一个UserControl2类。
- 编译解决方案,以便UserControl1和UserControl2显示在您的工具箱中。
- 将UserControl1和UserControl2拖到窗体上。设置边界,以便知道边界的位置。
- 运行该应用程序。
- 它现在可以从容器拖动ToolStrip的中的UserControl1和其放到UserControl2容器(留在UC1零个ToolStrips和UC2 2个ToolStrips)
- 现在想象一下,你只能访问到的UserControl1代码。如何防止用户将ToolStrip拖出ToolStripContainer的实例?
我试图重现你遇到的问题,但我似乎无法让它工作。一旦我创建了两个相同表单的实例,我就无法将工具栏从一个地方拖到另一个地方 – 2008-11-18 22:39:55
请参阅回购步骤。只有一个窗体实例具有两个单独的用户控件,而不是窗体的两个实例。 – 2011-05-28 21:47:32