dev控件 xtraTabbedMdiManager 如何将关闭子窗体改为收回主窗体内
前言
本文主要讲解 xtraTabbedMdiManager 如何将关闭子窗体改为收回主窗体内,顺便附上Float(浮动)的时候使窗体最大化,及指定只能某一个子窗体能浮动放大. 下面进入正题.
一、首先讲解,如何设置允许 拖动xtraTabbedMdiManager中的Page标题及双击Page标题都可以Float(浮动)
1、设置xtraTabbedMdiManager中的子窗体允许拖动Page标题实现浮动
右击xtraTabbedMdiManager选择属性,找到 FloatOnDrag属性,然后设置为True即可。
2、设置xtraTabbedMdiManager中的子窗体允许双击Page标题实现浮动
右击xtraTabbedMdiManager选择属性,找到 FloatOnDoubleClick属性,然后设置为True即可。
注意:序列1及序列2的设置只针对当xtraTabbedMdiManager的Page列表中有多个窗体时才管用.否则无论是双击还是拖动page都没效果. 那么如何实现只有一个page的时候也能实现双击或者拖动让其窗体Float(浮动)呢? 我们只需要 xtraTabbedMdiManager的BeginFloatin事件中加上这么一句代码即可. e.Cancel=false; 如下代码所示:
private void xtraTabbedMdiManager1_BeginFloating(object sender, DevExpress.XtraTabbedMdi.FloatingCancelEventArgs e) { e.Cancel = false; }
二、如何使浮动后的子窗体全屏放大,并且去边框.
方法一:我们可写xtraTabbedMdiManager的BeginFloatin事件,只需要接着上面代码,在代码中加上如下代码. (仅能放大不能去边框)
private void xtraTabbedMdiManager1_BeginFloating(object sender, DevExpress.XtraTabbedMdi.FloatingCancelEventArgs e) { e.Cancel = false;//当xtraTabbedMdiManager列表只有一个Page子窗体时, 要想浮动子窗体必须设置此属性. e.ChildForm.WindowState = FormWindowState.Maximized;//放大子窗体 }
方法二:写xtraTabbedMdiManager的Floating事件,(既能放大又能去边框),但是BeginFloating中的e.Cancel=false;不能注视掉. 可分开写, 也可把BeginFloating事件中放大的代码注释,同去边框代码一起写到此事件中,如下代码:
private void xtraTabbedMdiManager1_Floating(object sender, DevExpress.XtraTabbedMdi.FloatingEventArgs e) { e.ChildForm.WindowState = FormWindowState.Maximized;//全屏放大子窗体(此窗体中写了,BeginFloating中可以不写此句代码) e.ChildForm.FormBorderStyle = FormBorderStyle.None;//去除子窗体边框 }
三、如何使放大后子窗体缩小或者关闭的时候回到主窗体体内
1、放大后的子窗体关闭的时回到主窗体体内(没去边框的情况下) , 写Floating事件, 如下代码:
private void xtraTabbedMdiManager1_Floating(object sender, DevExpress.XtraTabbedMdi.FloatingEventArgs e) { e.ChildForm.WindowState = FormWindowState.Maximized;//全屏放大子窗体(此窗体中写了,BeginFloating中可以不写此句代码) //当前浮动窗体的关闭事件 e.ChildForm.FormClosing += (s, es) => { if (xtraTabbedMdiManager1.ActiveFloatForm == (s as Form)) { es.Cancel = true; e.ChildForm.MdiParent = this;//指定其父窗体 xtraTabbedMdiManager1.FloatForms.Remove(s as Form);//使此窗体中浮动的集合中移除 } }; }
2、放大后的子窗体关闭的时回到主窗体体内(去边框的情况下) , 依然写Floating事件, 如下代码:
主要实现思路就是, 当你放大子窗体并且去掉边框之后, 因为子窗体没有任何操作按钮,你压根无法通过点击关闭按钮使其响应关闭事件实现使子窗体回到主窗体体内. 那么我这里介绍的是通过双击子窗体使其在子窗体的双击事件中响应窗体关闭事件,从而达到让子窗体回到主窗体内. 代码如下:
private void xtraTabbedMdiManager1_Floating(object sender, DevExpress.XtraTabbedMdi.FloatingEventArgs e) { e.ChildForm.WindowState = FormWindowState.Maximized;//全屏放大子窗体(此窗体中写了,BeginFloating中可以不写此句代码) e.ChildForm.FormBorderStyle = FormBorderStyle.None;//去除子窗体边框 //当前浮动窗体的关闭事件,也就使其回到主窗体内 e.ChildForm.FormClosing += (s, es) => { if (xtraTabbedMdiManager1.ActiveFloatForm == (s as Form)) { es.Cancel = true; e.ChildForm.MdiParent = this;//指定其父窗体 xtraTabbedMdiManager1.FloatForms.Remove(s as Form);//使此窗体中浮动的集合中移除 } }; //响应当前浮动窗体的双击事件 e.ChildForm.DoubleClick += (a,b) => { //直接结束当前浮动窗体也就相当于响应了此窗体的关闭事件. e.ChildForm.Close(); }; }
注意:当你浮动并放大子窗体后, 你会发现我们通过alt+Tab切换或者别的方式居然还能操作主窗体界面, 这样是不是有点不太友好呢? 那么我们只需要在浮动放大的时候将子窗体隐藏, 回到主窗体的时候再显示主窗体. 可以通过 this.Visible = true;及 this.Visible=false;来实现.
四、指定只能某个子窗体才能浮动并且放大
只需要在xtraTabbedMdiManager的BeginFloatin事件第一句加个判断即可. 如下代码:
private void xtraTabbedMdiManager1_BeginFloating(object sender, DevExpress.XtraTabbedMdi.FloatingCancelEventArgs e) { //只让指定的窗体浮动并且放大. if (e.ChildForm.Text != "此处填写窗体名字") { e.Cancel = true; return; } e.Cancel = false;//当xtraTabbedMdiManager列表只有一个Page子窗体时, 要想浮动子窗体必须设置此属性. e.ChildForm.WindowState = FormWindowState.Maximized;//放大子窗体 }
至此, 关于dev控件 xtraTabbedMdiManager 如何将关闭子窗体改为收回主窗体内以及双击回到主窗体内及相关功能的代码介绍完毕. 如有错误请指出,谢谢大家了. 如还有相关方面问题的请在此博客中留言, 看到会第一时间回复大家.