如何通过按键来关闭另一窗口?

whh764224646 2012-09-07 12:08:43
我的结构是这样:
在PrsMain窗体tabControl控件的每一选项卡中嵌套了一窗体Prs_Zzmmsz、Prs_Zwlbsz....等(这些窗体都是通控件添选项卡然后加载窗体其),在选项卡中标签中重绘了关闭选项卡的按键,现在问题是当我关闭选项卡时,所嵌套的窗体不被关闭(我试运行中才发现关闭选项卡重新打开选项卡嵌套的窗体不更新数据)?如何解决这个问题,请前辈们指点!
...全文
286 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy1020tc 2012-09-13
  • 打赏
  • 举报
回复
楼主在tabControl中添加窗体 明显是有问题的 因为窗体的级别高于tabControl
tabControl只是个控件而已 你这样操作 实际上也只是在点选项卡时 也只是改变某一个窗体的level
让其显示在最上面而已 并没有让数据重新加载

还是把那些窗体换成datagridview之类的控件吧 显示数据而已 不要搞得太复杂

要是lz想用自定义控件 也可以 但没必要 在每个选项页里 添加显示数据的控件就行了
写好一个获取数据的方法
在你每次切换选项卡的时候 就执行这个方法 就能实现数据更新了

没必要去掉再添加 本来你切换以后 之前的就看不到了 去掉再添加是多此一举
whh764224646 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
楼主在tabControl中添加窗体 明显是有问题的 因为窗体的级别高于tabControl
tabControl只是个控件而已 你这样操作 实际上也只是在点选项卡时 也只是改变某一个窗体的level
让其显示在最上面而已 并没有让数据重新加载

还是把那些窗体换成datagridview之类的控件吧 显示数据而已 不要搞得太复杂

要是lz想用自定义控件 也可以 但没必要 在每个……
[/Quote]
谢谢老兄弟的见议!
但如何选项卡很多这样太乱了点吧!给操作人员操作起来去找相关的选项卡头都大了!
我的理念是简洁,操作人想操作那些就显示那些!不想操作了就关掉,也许任何东西都有它存在的理由吧!
whh764224646 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
直接REMOVE TABPAGE就可以,或者 TABPAGE 的 VISIBLE = FALSE
[/Quote]
谢谢!
但还是不行哦能否加你的QQ呢?我的QQ:191971159

我的代码如下:
加载自定义控件代码
#region 人事管理-人事档案管理
int aa = this.tabControl_Prs.TabPages.Count;
if (FrmName == "人事档案管理") //判断当前要打开的窗体
{
bool re = true;
foreach (TabPage page in tabControl_Prs.TabPages)
{
if (page.Text == FrmName)
{
re = false;
this.tabControl_Prs.SelectedTab = page;//激活窗体
break;
}
}
if (re)//如果没有找到
{
aa++;
tabControl_Prs.TabPages.Add(new TabPage(FrmName));
this.tabControl_Prs.TabPages[aa - 1].Controls.Add(newPrs_Rsdagl);
this.tabControl_Prs.SelectedIndex = aa - 1;//设置为活动窗口
}

}
#endregion
关闭选项卡代码
private void tabControl_Prs_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{

if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y;
//计算关闭区域
Rectangle myTabRect = tabControl_Prs.GetTabRect(tabControl_Prs.SelectedIndex);
myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE_X + 3), 2);
myTabRect.Width = CLOSE_SIZE_X;
myTabRect.Height = CLOSE_SIZE_X;
//如果鼠标在区域内就关闭选项卡
bool isClose = x > myTabRect.X && x < myTabRect.Right && y > myTabRect.Y && y < myTabRect.Bottom;
if (isClose)
{
tabControl_Prs.TabPages.Remove(tabControl_Prs.SelectedTab);//关闭选项卡
}
}
}

恳请您的指点,再次表示感谢!
jcyluck 2012-09-12
  • 打赏
  • 举报
回复
直接REMOVE TABPAGE就可以,或者 TABPAGE 的 VISIBLE = FALSE
service4phones 2012-09-12
  • 打赏
  • 举报
回复
会员的头像怎么都变成了C了?
whh764224646 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhanglong19891129 的回复:]
引用 10 楼 的回复:

引用 9 楼 的回复:
appcation.showdowm(FROMNAME);这样可以关闭。。


错误:当前上下文中不存在名称“Appcation”
我改成Application.showdowm(newPrs_Rsdagl);
错误:“System.Windows.Forms.Application”并不包含“showdowm”的定义

我网……
[/Quote]
谢谢各位了!
在tabControl控件的选项卡中嵌套了窗体存在很多问题,我想把窗体改成一个自定义控件,我的想法是这样当关闭选项卡时就把嵌套在里面的自定义控件移除,当添加选项卡时又把加载进来!(这样达到关闭后重新打开数据能得到更新)
请问移除自定义控件又如何写代码?恳请前辈指点迷精!
zhanglong19891129 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 9 楼 的回复:
appcation.showdowm(FROMNAME);这样可以关闭。。


错误:当前上下文中不存在名称“Appcation”
我改成Application.showdowm(newPrs_Rsdagl);
错误:“System.Windows.Forms.Application”并不包含“showdowm”的定义

我网上查到资料:
在c#200……
[/Quote]
我的英文很菜的,,所以单词不会写 正确的应该是这样的 Application.ShutDown(FromName);
在你重绘的按钮中这样去关闭 当前from;
LZ的问题应该是 选项卡中不能包含From吧,就是From不是当前选项卡的子控件.
whh764224646 2012-09-11
  • 打赏
  • 举报
回复
有朋友指点吗?
xiepanqi123 2012-09-10
  • 打赏
  • 举报
回复
试试((Form)tabControl1.TabPages[0].Container.Components[0]).Close();
不知道可不可行
whh764224646 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
appcation.showdowm(FROMNAME);这样可以关闭。。
[/Quote]

错误:当前上下文中不存在名称“Appcation”
我改成Application.showdowm(newPrs_Rsdagl);
错误:“System.Windows.Forms.Application”并不包含“showdowm”的定义

我网上查到资料:
在c#2005中Application.Terminate与Application.exit的区别Application->terminate是你想什么时候执行就什么时候执行。执行了之后系统会调用Application.exit是整个系统完全退出。
然后我这么用Application.Terminate(newPrs_Rsdagl);
还是错误,错误为“错误 1 “System.Windows.Forms.Application”并不包含“Terminate”的定义

期待前辈指点!若能有在QQ(191971159)上帮一把,本人不胜感激!
zhanglong19891129 2012-09-10
  • 打赏
  • 举报
回复
appcation.showdowm(FROMNAME);这样可以关闭。。
whh764224646 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
试试((Form)tabControl1.TabPages[0].Container.Components[0]).Close();
不知道可不可行
[/Quote]
谢谢!你的代码我还不会什么用,能否详细的解释一下呢?

再加10分等待前辈们!
whh764224646 2012-09-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
ADD Remove 选型卡 就得了..数据有跟新的话 就在重新绑定下
[/Quote]
就是用了“Remove”啦,老兄!
我的代码如下:
加载窗口
int aa = this.tabControl_Prs.TabPages.Count;
#region 民族类别设置
if (FrmName == "民族类别设置") //判断当前要打开的窗体
{
bool re = true;
foreach (TabPage page in tabControl_Prs.TabPages)
{
if (page.Text == FrmName)
{
re = false;
this.tabControl_Prs.SelectedTab = page;//激活已打开的窗体
break;
}
}
if (re)//如果没有找到
{
//添加窗体
aa++;
newPrs_Mzlbsz.TopLevel = false;
newPrs_Mzlbsz.Visible = true;
tabControl_Prs.TabPages.Add(new TabPage(FrmName));
this.tabControl_Prs.TabPages[aa - 1].Controls.Add(newPrs_Mzlbsz);
this.tabControl_Prs.SelectedIndex = aa - 1;//设置为活动窗口
}
}

关闭选项卡(嵌有窗体的)
if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y;
//计算关闭区域
Rectangle myTabRect = tabControl_Prs.GetTabRect(tabControl_Prs.SelectedIndex);
myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE_X + 3), 2);
myTabRect.Width = CLOSE_SIZE_X;
myTabRect.Height = CLOSE_SIZE_X;
//如果鼠标在区域内就关闭选项卡
bool isClose = x > myTabRect.X && x < myTabRect.Right && y > myTabRect.Y && y < myTabRect.Bottom;
if (isClose)
{
tabControl_Prs.TabPages.Remove(tabControl_Prs.SelectedTab);
}
}


再加10分~~~
huguangwu 2012-09-07
  • 打赏
  • 举报
回复
没有太明白你的意思,能否发个设计图了解你的意思
zhanglong19891129 2012-09-07
  • 打赏
  • 举报
回复
ADD Remove 选型卡 就得了..数据有跟新的话 就在重新绑定下
kunkun0921 2012-09-07
  • 打赏
  • 举报
回复
关闭选项卡的同时,dispose掉选项卡中的窗体。
熙风 2012-09-07
  • 打赏
  • 举报
回复
你重新打开的时候没有重新加载窗体,所以没有更新数据
stonespace 2012-09-07
  • 打赏
  • 举报
回复
选项卡应该是不能关闭的,只能切换,不知道你说的关闭是什么意思?

110,534

社区成员

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

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

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