只打开一个子窗体

在程序处理过程中,某一个功能可能需要打开一个窗体来设置参数,我们需要用户只能打开一个子窗体,可能通过判断窗体对象是否为空来实现。

        //判断窗体是否重新实例化
       private frmAutoSave fas = null;
        protected override void OnClick()
        {
            try
            {
                if (fas == null)
                {
                    fas = new frmAutoSave(timer);
                    fas.Show();
                }
                else
                {
                    fas.Show();
                }
            }
            catch (Exception exp)
            {
                MessageBoxEx.Show(exp.Message + exp.StackTrace);
            }

        }

  

但是,用户在关闭窗体时,不能释放对象,所以要重写关闭事件:

//重写关闭事件
protected virtual void frmAutoSave_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    this.Hide();
}

  其中,Cancel属性是获取或设置指示是否应取消事件的值。即取消当前关闭事件的执行。这样的功能很有用,比如MSDN上说的一个例子:如果程序关闭的时候数据没有保存(可以用一个Bool变量为判断),就是关闭事件中设置Cancel属性为true,这样程序就不会关闭了。

参考:https://msdn.microsoft.com/zh-cn/library/system.componentmodel.canceleventargs.cancel.aspx

时间: 2024-09-20 07:41:08

只打开一个子窗体的相关文章

急~~在子窗体中打开另个子窗体并关闭本窗体`为什么只关闭本窗体而无法打开

问题描述 DimfrmAsNewMDImainDimfrm2AsNewform2frm2.MdiParent=frmfrm2.Show()Me.Hide()我那里错了?? 解决方案 解决方案二:'DimfrmAsNewMDImain去掉!Dimfrm2AsNewform2frm2.MdiParent=me.MdiParentfrm2.Show()Me.Hide()'或直接Close掉解决方案三:当你使用NewMDImain的时候,只是把frm2加到了一个未显示出来的刚建立的MdiMain中了,而

c# 怎在主窗体中自定一个属性,用来保存已打开的子窗体实例

问题描述 我的目的就是想实现子窗体和子窗体互访,网上有一个方法mdiParent是针对form的,但是我用的是DockPane的DockContent,所以没办法用mdiParent.不知可不可以在主窗体formMain中新建一个属性formCollections,这个属性用来保存已打开的子窗体的实例,每打开一个子窗体,就把这个子窗体的实例作为一个对象加入到主窗体的formCollections属性中,当某一子窗体childForm1想访问另一子窗体childForm2时,就可以运用formMa

单击树节点在父窗体中打开了几个子窗体,如何做到我选中节点后打开对应的子窗体???

问题描述 单击树节点在父窗体中打开了几个子窗体,如何做到我选中节点后打开对应的子窗体???-节点0---A---B---C选中节点A,弹出FORM1选中节点B,弹出FORM2选中节点C,弹出FORM3我的代码如下,但是只能打开同一下窗体,如何实现点击不同节点后显示相应的窗体呢privatevoidtrwFuncFrame_AfterSelect_1(objectsender,TreeViewEventArgse){System.Stringstr=trwFuncFrame.SelectedNod

checkbox-怎么在主窗体中实现多个子窗体的CheckBox单选?

问题描述 怎么在主窗体中实现多个子窗体的CheckBox单选? 解决方案 可以用图片和checkbox组合下试试 解决方案二: 是winframe 还是webframe?说清楚点 解决方案三: 你是要在一个frame 中打开多个子frame吗?如果是这样的话你可以在夫frame中定义一个变量来判断子frame中是个有CheckBox 选中

C#Windows窗体应用程序中如何在父窗体里关闭所有打开的子窗体

问题描述 就是有一个父窗体,打开了3个子窗体,在主菜单里有个窗体按钮,点击可以关闭当前打开的所有子窗体,哪位大仙帮帮忙 解决方案 解决方案二:http://blog.csdn.net/bdstjk/article/details/7007882解决方案三: 解决方案四:我做的是父窗体,而且我的问题跟你给的链接里的内容也没关系

MDI 窗口在打开一个子窗口同时关闭已经打开的子窗口时,子窗口上 datagridview 中的列标题刷新的问题

问题描述 在MDI窗口中打开一个带有datagridview控件的子窗口,同时关闭另一个已经打开的带有datagridview控件的子窗口时出现datagridview中的列标题中含有已关闭子窗口中datagridview的列标题,如下图.使用的VS版本为VS2010旗舰中文版,datagridview在窗口load事件中绑定数据源.打开一个子窗口,同时关闭已打开子窗口的代码如下privateconsumerf_consumer;privatevoidConsumerToolStripMenuI

如何获取未打开的子窗体集合

问题描述 请教如何获取MDI未打开的子窗体集合例:现在写一个MDI程序,添加了10个子窗体,程序运行后在未对任何子窗体show之前,如何获取到,即IsMdiContainer=false的所有窗体 解决方案 解决方案二:PublicClassForm1PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadMe.IsMdiContainer=TrueTextBox1.Te

visual studio-Visual Studio2012文件->打开->网站,打开的窗体没有打开按钮,窗体页不能缩小

问题描述 Visual Studio2012文件->打开->网站,打开的窗体没有打开按钮,窗体页不能缩小 图片只能向下移动,不能向上移动,所以不能找到打开按钮 解决方案 你打开项目,应该是点文件-打开,选择sln或者csproj 解决方案二: 隐藏任务栏试试,这个窗口太大了吧,软件的问题 解决方案三: 这个窗口无法改变大小?估计是分辨率不够,打开按钮部分没显示出来.

怎么建立多个子窗体?并把父窗体内的listbox想中的值传递到各个子窗体的listbox?

问题描述 怎么建立多个子窗体?并把父窗体内的listbox想中的值传递到各个子窗体的listbox? 解决方案 解决方案二:为什么会有这样的逻辑,应该是子窗体往父窗体传值才对,不过你要是想那样,可以参考一下parent.解决方案三:你的父窗体的IsMdiContainer=true,然后你的子窗体的MdiParent=父窗体,就行了,至于传值方法很多,你可以把父窗体的listbox作为参数在new子窗体时传过去就行了.解决方案四:MdiParent在哪里啊?也是属性?怎么用啊?