我有一个 MDI 应用程序,它允许我打开不同类型的子窗口。我可以打开相同类型的子窗口的多个(但不同的)实例。(示例:我可以打开 3 个子窗口类型 A 的实例和 2 个子窗口类型 B 的实例。所有 5 个窗口都是不同的实体,除非用户明确将相同的数据拖到多个窗口上,否则它们不会共享数据。)每个子窗口有一个带有一个或多个 ToolStrips 的 ToolStripContainer。我该如何预防:
- 用户从 A 类型的子窗口中将 ToolStrip 拖到 B 类型的子窗口中的 ToolStripContainer 中?
- 用户是否将 ToolStrip 从子窗口 A 的一个实例拖到同一类型窗口的另一个实例中的 ToolStripContainer?
我试图阻止用户将 ToolStrip 从 A 类型的实例 1 拖动到 A 类型的实例 2,在实例 2 上选择一些东西,然后单击工具栏上的一个按钮,只是为了让其他一些窗口发生奇怪的事情. 同样,将 ToolStrip 从 A 类型的窗口拖动到 B 类型的窗口是没有意义的——这些操作不适用于该类型,但对用户来说,一切都很好,因为我让他们这样做阻力。
是像为 ControlAdded 事件添加我自己的处理程序一样简单,还是有更好的方法来做到这一点?我在 .NET 3.0 中使用 WinForms。
编辑:重现的步骤
- 创建一个新的 Windows 应用程序项目。
- 添加一个新的用户控件。为控件提供一个 ToolStripContainer,其中包含一个带有单个按钮的 ToolStrip。
- 重复第 2 步,为您提供一个 UserControl2 类。
- 编译解决方案,以便 UserControl1 和 UserControl2 显示在您的工具箱中。
- 将 UserControl1 和 UserControl2 拖到窗体上。设置边界,以便您知道边界在哪里。
- 运行应用程序。
- 现在可以将 ToolStrip 从 UserControl1 中的容器拖放到 UserControl2 中的容器中(在 UC1 中留下零个 ToolStrip,在 UC2 中留下两个 ToolStrip。)
- 现在假设您只能访问 UserControl1 中的代码。如何防止用户将 ToolStrip 拖出 ToolStripContainer 的实例?