【发布时间】:2008-11-18 04:56:32
【问题描述】:
我有一个 MDI 应用程序,它允许我打开不同类型的子窗口。我可以打开相同类型的子窗口的多个(但不同的)实例。 (示例:我可以打开 3 个子窗口类型 A 的实例和 2 个子窗口类型 B 的实例。所有 5 个窗口都是不同的实体,除非用户明确将相同的数据拖到多个窗口上,否则它们不会共享数据。)每个子窗口有一个带有一个或多个 ToolStrips 的 ToolStripContainer。如何预防:
- 用户是否将 ToolStrip 从 A 类型的子窗口拖动到 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 实例?
【问题讨论】:
-
我试图重现您遇到的问题,但我似乎无法让它工作。一旦我创建了相同表单的两个实例,我一开始就无法将工具栏从一个拖到另一个
-
查看回购步骤。只有一个带有两个单独用户控件的表单实例,而不是两个表单实例。
标签: c# .net winforms mdi toolstrip