如何实现MDI窗体中,当前上级TabPage页面标签的问题……

morliz子轩 2020-05-21 04:42:59


在关闭上如何实现 ,点那个TabPage叉叉的功能,我就想问问这个。

因为这个Page页面,同MDI Form加载进来的,直接执行this.Close();

只是这个子窗体内容没了,TabPage标签还在。
...全文
442 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2020-05-25
  • 打赏
  • 举报
回复
引用 12 楼 assky124 的回复:
用字典存一下对应关系就行了,Dict<TabItem,Form>这样的,重写Dict 的Add和Remove 函数,增加ListChange时间, 你的Tab关注List Change,点击TaItem上的关闭或者关闭窗体都移除Dict上的相应项,就会触发ListChange,然后通知TabHeader更新就好了
哥,一看你就是内行专家。这个方法,我能借鉴过来用,就感觉还凑合勉强了。 而且我发现在调用XtraForm窗体进行tabMain AddPage加载时,子窗体会单独闪现一下,才正常。 你要我重写Dict字典,我更加不会了。 你能不能帮我重写一下呢?有劳了
assky124 2020-05-25
  • 打赏
  • 举报
回复
用字典存一下对应关系就行了,Dict<TabItem,Form>这样的,重写Dict 的Add和Remove 函数,增加ListChange时间, 你的Tab关注List Change,点击TaItem上的关闭或者关闭窗体都移除Dict上的相应项,就会触发ListChange,然后通知TabHeader更新就好了
艾克是大叔 2020-05-25
  • 打赏
  • 举报
回复
XtraForm 定义一个代理。一个 EVENT 变量 。
点击事件使用 EVENT变量方法。

然后在外面初始化的时候 将 XtraForm.EVENT变量方法 赋值 tabMain 中的事件方法。
morliz子轩 2020-05-24
  • 打赏
  • 举报
回复
请教一下,你有没有这个逻辑类似的案例,我想多了解一下。感谢
艾克是大叔 2020-05-23
  • 打赏
  • 举报
回复
之前理解有误。 FrmBranch的 你要点击的这个控件 变成Public 的 然后在 FrmMain 中 你创建 XtraForm 时将 XtraForm 中 public 控件的 点击事件 += tabMain_CloseButtonClick。 然后你要修理一下 获取 cText 的方式。 找一个 XtraForm 和 XtraTabPage 共同的属性 来判断是否是一套的。因为目前 tabMain_CloseButtonClick 只支持 XtraTabPage 往里传值。或者拆分开处理也行。判断一下传进来的是什么控件 然后再获取属性分别处理。
morliz子轩 2020-05-23
  • 打赏
  • 举报
回复
引用 8 楼 TinMan2012 的回复:
思路的问题 xtraTabControl1 是一个控件,你的页面内容 都存在 这里。而关闭页签的事件也是在 xtraTabControl1 你找一下 你的这个控件的事件(就是属性界面中上方闪电的标志) 将 CloseButtonClick 事件的方法 改成你的
你的思路很对,来你帮我改改: 这个是FrmMain主程序窗体写的

        private void tabMain_CloseButtonClick(object sender, EventArgs e)
        {
            DevExpress.XtraTab.ViewInfo.ClosePageButtonEventArgs args = (DevExpress.XtraTab.ViewInfo.ClosePageButtonEventArgs)e;
            string cText = args.Page.Text;       //获取关闭选项卡的text

            if (dictXtraForm.ContainsKey(cText))
            {
                XtraForm form = dictXtraForm[cText] as XtraForm;
                form.Close();
                form.Dispose();
                dictXtraForm.Remove(cText);
            }

            if (dictXtratabPage.ContainsKey(cText))
            {
                tabMain.TabPages.Remove((XtraTabPage)args.Page);
                dictXtratabPage.Remove(cText);
            }
下面这个是问题贴中图的FrmBranch

        //关闭当前页面
        private void barTabPageClose_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {

        }
艾克是大叔 2020-05-23
  • 打赏
  • 举报
回复
思路的问题 xtraTabControl1 是一个控件,你的页面内容 都存在 这里。而关闭页签的事件也是在
xtraTabControl1
你找一下 你的这个控件的事件(就是属性界面中上方闪电的标志) 将 CloseButtonClick 事件的方法 改成你的
morliz子轩 2020-05-22
  • 打赏
  • 举报
回复
引用 4 楼 EdsionWang 的回复:
这样改上去,我测测试了没有作用,报错:还是
morliz子轩 2020-05-22
  • 打赏
  • 举报
回复
引用 4 楼 EdsionWang 的回复:
把【DevExpress.XtraBars.ItemClickEventArgs e】改成【System.EventArgs e】就行了吗?
morliz子轩 2020-05-22
  • 打赏
  • 举报
回复
我按你说的思路写到这里,这个事件怎么捕捉呢? 这个地方不会写了
EdsionWang 2020-05-22
  • 打赏
  • 举报
回复
引用 2 楼 morliz子轩 的回复:
我是借助这个方法写的: https://blog.csdn.net/u012972326/article/details/86528719 其中ShowMDI就是。
按照这篇博客来的话,你唯一要做的是怎么找到这个TabPage跟你这个MDIForm的对应关系,通过这个关系找到要关闭的Tab

  if (dictXtraTabPage.ContainsKey(cText))
            {
                xtraTabControl1.TabPages.Remove((XtraTabPage)a.Page);//找到能标记你要关闭的Tab
                dictXtraTabPage.Remove(cText);
            }
assky124 2020-05-22
  • 打赏
  • 举报
回复
用 DockPanel 试试
morliz子轩 2020-05-22
  • 打赏
  • 举报
回复
我是借助这个方法写的: https://blog.csdn.net/u012972326/article/details/86528719 其中ShowMDI就是。
dmankill 2020-05-21
  • 打赏
  • 举报
回复
你tab是怎么加上去的,应该有对应的关闭/隐藏/销毁的方法吧

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧