小编Pov*_*las的帖子

C#.NET MDI在以编程方式隐藏并再次显示最大化子表单时出现错误,并且在最大化时,无法更改子表单的图标

基本上我在使用C#.NET MDI时遇到两个问题.你可以下载VS2010解决方案,它可以在这里重现bug .

1)当以编程方式隐藏并再次显示最大化的子表单时,它不会再次正确最大化并且既不会最大化也不会处于正常状态.

childForm = new Form();
childForm.Text = "Child Form";
childForm.MdiParent = this;

...

private void showButton_Click(object sender, EventArgs e)
{
    childForm.Visible = true;
}

...

private void hideButton_Click(object sender, EventArgs e)
{
    childForm.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

当子表单最大化,然后再逐步隐藏和显示时,它会变成这样的(请注意菜单栏 - 子表单的控件框出现,但子表单没有最大化):

替代文字

在这个阶段,儿童形式不能四处移动.但是,我找到了一个解决方法,只需显示并隐藏一个虚拟子表单,这会强制实际的子表单正确最大化.但这会使MDI区域闪烁.尝试了Invalidate,Refresh,Update方法,但它们没有帮助.也许还有其他的解决方法可以克服这个错误,而不是让MDI区域与虚拟子表单闪烁?

private void workaround1Button_Click(object sender, EventArgs e)
{
    dummyForm.Visible = true;
    dummyForm.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

2)当子表单最大化时,子表单的图标显示在菜单栏上.但是,如果您必须在子窗体最大化时更改图标,则菜单栏上的图标不会刷新(请参见上图).我找到了一个解决方法,它基本上隐藏并显示菜单栏.图标会刷新,但它会使菜单栏下方的所有内容都闪烁.尝试了Invalidate,Refresh,Update方法,但它们没有帮助.有没有其他方法可以使菜单栏刷新子表单的图标?

private void workaround2Button_Click(object sender, EventArgs e)
{
    menuStrip.Visible = false;
    menuStrip.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)

此外,我注意到,当父窗体是处于正常的窗口状态模式(没有最大化),你的1个像素改变窗体的宽度或高度,子窗体变为最大化,因为它应该是和子窗体的菜单栏上的图标就会正确刷新和你不需要我上面描述的其他解决方法.如果我逐个更改表单的大小,请将表格闪烁1个像素,当父表单最大化时,我不能这样做.有什么办法,我怎么能调用,当你调整窗体被称为以及使子窗体最大化成为正确和菜单栏上的图标刷新重绘/刷新功能?

.net c# mdi

8
推荐指数
1
解决办法
5481
查看次数

WinForms编程 - 模态和非模态形式问题

我在C#.NET下的表单模态有问题.假设我的主要形式为#0(见下图).此表单代表主要的申请表,用户可以在其中执行各种操作.但是,有时需要打开其他非模态表单来执行支持任务的其他主要应用程序功能.让我们说这是图像中的#1形式.在这个#1表单上可能会打开几个额外的模态表单(图像中的#2表单),最后,有一个进度对话框显示一个长的操作进度和状态,这可能需要几个几分钟到几个小时.问题是,在关闭所有模态窗体(图像中的#2)之前,主窗体#0不响应.我需要主要形式#0在这种情况下可以运行.但是,如果您在表单#2中打开非模态表单,则可以使用模式#2表单和新创建的非模态表单.我需要主窗体#0和窗体#1与其所有子窗体之间的相同行为.可能吗?或者我做错了什么?也许有某种解决方法,我真的不想将所有ShowDialog调用改为Show ...

图片http://img225.imageshack.us/img225/1075/modalnonmodalproblem.png

c# forms modal-dialog non-modal

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×2

.net ×1

forms ×1

mdi ×1

modal-dialog ×1

non-modal ×1