浮动/停靠窗口:从MDI Parent中取消MDI子项创建新的MDI父项以保存子项

时间:2014-03-11 04:11:18

标签: .net winforms devexpress mdi mdiparent

我使用DevExpress控件(DocumentManager和BarManager)编写了几个MDI多标签Winforms应用程序,我试图添加行为,以便取消子窗体(FormEditor)并拖出容器将创建一个容器的新实例(FormMaster.2)并将子项添加到它,因此子窗体始终位于MDI容器中。我正在尝试实现类似于Internet Explorer,Chrome等中的制表符停靠的效果

到目前为止,我的方法导致了一个消失的孩子和一个.NET异常:    无法更改父级控件的顶级样式

EDITED: 在最初的问题中,我注意到我尝试挂钩到ParentChanged事件,并实例化我的MDI父表单的新实例以进行概念验证。这只是暂时的,因为该事件会在孩子脱离时立即触发,这太快了。我设置child.ParentChanged事件以检查Parent == null,然后创建一个新的FormMaster容器并在同一事件中设置MdiParent。它不起作用。

ANSWER :DmitryG向我指出了DevExpress BaseView.FloatingDocumentContainer属性。设置DocumentManager.View.FloatingDocumentContainer = DocumentsHost。使用它对于默认解决方案已经足够了,但您可能希望更进一步,并使用您自己的表单覆盖默认容器。 CustomDocumentsHostWindow事件允许我提供构造函数来实例化我的特定自定义MDI父窗体。表单必须实现IDocumentsHostWindow接口,其中最小的只有两个简单的属性。

感谢DmitryG的正确答案。我在这里为SO读者提供我的最终解决方案代码,根据这里的文档:BaseView.CustomDocumentsHostWindow Event

   // FormMain should be setup as an MDIParent with appropriate settings for tabbed MDI, etc.
   public partial class FormMain : XtraForm, IDocumentsHostWindow
   {
      public FormMain()
      {
         InitializeComponent(); 
         documentManager1.View.FloatingDocumentContainer = FloatingDocumentContainer.DocumentsHost;
         documentManager1.View.CustomDocumentsHostWindow +=
             (sender, args) => {
                 args.Constructor = () => new FormMain(); // instantiate my custom parent
             };
      }

      // interface IDocumentsHostWindow
      public bool DestroyOnRemovingChildren
      {
         get { return true; }
      }

      public DocumentManager DocumentManager
      {
         get { return documentManager1; }
      }
   }

这也适用于稍早的DevExpress 12.1。

1 个答案:

答案 0 :(得分:2)

据我所知,DevExpress DocumentManager提供了所需的功能,无需任何额外的编码即可使用 FloatingDocumentContainer功能 - 如果BaseView.FloatingDocumentContainer属性设置为DocumentsHost,浮动文档将托管在可以停靠其他文档的容器中。停靠在这种浮动容器上的文档显示为选项卡。

BaseView.CustomDocumentsHostWindow事件允许您将自定义表单作为浮动文档的主窗口。

P.S。您可以使用其复制Visual Studio 2013 UI的Docking 2013 UI技术演示来使用此功能。 (latest free trial