新手的低级问题,C# winform 程序,vs2008。MDI窗口,已开启了一个窗口form1,点菜单栏上的按钮,要开启另一个窗口form2,同时关闭form1。问:
1.如何关闭form1,没办法直接form1.close(),会提示说form1不存在。
2.如果不是关闭form1,而是form1.hide(),那怎么才能再让form1显示出来,直接show的话跟问题1一样,提示form1不存在。
3.如何获取MDI窗体的当前活动子窗口的名称呢?
4.如何遍历MDI窗体已打开的全部子窗口,以便找到指定名称的那个子窗体。
5.如何防止重复开启新的子窗体?
1.如何关闭form1,没办法直接form1.close(),会提示说form1不存在。
2.如果不是关闭form1,而是form1.hide(),那怎么才能再让form1显示出来,直接show的话跟问题1一样,提示form1不存在。
3.如何获取MDI窗体的当前活动子窗口的名称呢?
4.如何遍历MDI窗体已打开的全部子窗口,以便找到指定名称的那个子窗体。
5.如何防止重复开启新的子窗体?
解决方案 »
- 请问如何能批量定义一批泛型数组
- 怎么能停止或暂停其中的某个站点,在IIS管理工具可以直接操作,用C#怎么实现?
- VSS2005在VS2005下出现的奇怪问题,两天了都没搞定,不能工作了...
- 令我抓狂的问题!!!拜托了!!!
- .net中几个名词的理解(Assembly,Module,Type,Class...)
- 怎样用C#实现runas功能?
- Delphi写的动态库函数如何在C#中调用
- 关于WPF中定时执行事件的问题
- 火急!在指定矩形区域内打印字符串,不能溢出这个矩形,字符串根据需要可能要多行显示。
- 发现一个介绍微软.net技术的好站,向大家推荐
- C#.net compact framework 问题
- C# ftp 如何判断服务器上的文件夹是否存在
new System.Threading.Thread((System.Threading.ThreadStart)delegate
{
Application.Run(new Form());
}).Start();
this.Close();
一个Application.Forms[FormName]就解决了
{
//以下开启新的窗口form2
formset form2 = new formset();
form2.MdiParent = this;
form2.Show();
//怎么关闭form1呢。
}我在这里如何关闭form1呢,
FormCustomerInformation formCustomerInformation = null;
private void 客户基本信息ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (formCustomerInformation == null)
{
formCustomerInformation = new FormCustomerInformation();
formCustomerInformation.MdiParent = this;
formCustomerInformation.WindowState = FormWindowState.Maximized;
formCustomerInformation.Show(); }
else
{
if (formCustomerInformation.IsDisposed)
{
formCustomerInformation = new FormCustomerInformation();
}
formCustomerInformation.MdiParent = this;
formCustomerInformation.WindowState = FormWindowState.Maximized;
formCustomerInformation.Show();
formCustomerInformation.Focus();
}
private void toolStripButton_shuaxin_Click(object sender, EventArgs e)
{
if (this.ActiveMdiChild != null) //判断是否有子窗体
{
if (this.ActiveMdiChild == formCustomerInformation) //有
{
formCustomerInformation.shuaxindgv();// 子窗体事件调用 }
}
else
{
return;
}
}
我估计你要的是这个
1种方法使MDI父窗体调用子窗体(子窗体同时只能显示一个)
有一个MDI窗体叫MainForm,多个子窗体,如Form1,Form2…… 要使子窗体同时只能显示一个,那么方法1 dim Form1 as new form1 Form1.showDialog() 此方法一个MDI窗体同时只能显示一个, 方法2 在每一个子窗体的应用单态设计模式 在每一个子窗体上声明 private sub new() end sub Public Shared NewMe…… MDI窗体调用时 dim form1 as form1=form1.NewME form1.show() 这种方法每一个子窗体都要应用单态,代码重复多,不好
方法3 是方法2的改良先写一个ChildForm继承Form 在窗体上声明 private sub new() end sub Public Shared NewMe…… 再把所有的子窗体继承它 MDI窗体调用时 dim form1 as form1=form1.NewME form1.show() 这种方法很好,代码也少
方法4 利用MDI窗体的Controls属性循环检测当是否以存在所需子窗体存在则 .show .Activate 不存在则new了再.show
方法5 在MDI窗体上 Dim Form1 as form1 Friend Sub ShowForm1() If Form1 Is Nothing OrElse Form1.IsDisposed Then Form1 = New Form1 Form1.MdiParent = Me End If Form1.Show() Form1.Activate() End Sub 这种方法的缺点,每一个子窗体都要写一个这样的方法
方法6 利用泛型改良方法5 先写一个ChildFormManager类 ''' <summary> ''' 调用子窗口 ''' </summary> ''' <typeparam name="T"></typeparam> ''' <res></res> Public Class ChildFormManager(Of T As {Form, New}) Public Shared Sub show(ByVal myform As T, ByVal Mdi As Form) If myform Is Nothing OrElse myform.IsDisposed Then myform = New T myform.MdiParent = Mdi End If myform.Show() myform.Activate() End Sub End Class 在MDI窗体中这样调用 dim Form1 as Form1 form1=ChildFormManager(of Form1).show(form1,Me)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sanwaxubin/archive/2008/06/21/2572453.aspx
结贴给分 呵呵
this.ActiveMdiChild.close() 搞定收工,其实我的意思还是没有表述清楚哈,我要做个MDI程序,但同一时间只允许一个子窗口的程序。还有个疑问哈,使用this.ActiveMdiChild.close() 是完全关闭了当前子窗口。如果我用this.ActiveMdiChild.hide()的话,当前窗口form1被隐藏,如果我再次点按钮把form1显示出来,这个时候又会执行new,然后才.show(),那么这个时候show出来的form1还是前面被hide()的那个form1吗,还是说前面那个form1还在隐藏着,第二次又new了一个实例出来了??就是两个form1??糊里糊涂ing。
if(form1!=null)
{
//do something
}
{
if (item != this)
{
item.Hide();
}
} 隐藏本窗体外的所有窗体