非模态窗体的创建

最近工作要做一个跟ArcGIS一样的识别窗体,发现该窗体不需要关闭就可以进行主窗体的操作,搜寻诸多材料(多是MFC窗体中的),才知道是使用非模态窗体制作出来的。在Winform中模态窗体和非模态窗体的使用在于调用的方法不同。

模态窗体:ShowDialog()方法,非模态窗体使用:Show()方法。

区别:

    模态与非模态窗体的主要区别是窗体显示的时候是否可以操作其他窗体。模态窗体不允许操作其他窗体,非模态窗体可以操作其他窗体。


模态窗体利用show方法设置好了,确实可以实现与主窗体的交互,但是如果再次触发调用非模态窗体事件,则非模态窗体依旧弹出,也就是有多个窗体,所以我们需要判断该窗体是否已经存在,如果存在就不要在调用窗体show事件。

例如:利用vs添加两个窗体,Form2中放一个文本框,Form1中放一个button按钮,弹出文本框的内容。

我们在Form1中进行写button的单击事件,注意:此时的frm对象应该创建在单击事件之外;



 public Form2 frm;
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if (frm==null||frm.IsDisposed)        //如果窗体不存在
            {
                frm = new Form2();
                frm.TopMost = true;       //显现在主窗体前面
                frm.Show();
                MessageBox.Show(frm.textEdit1.Text);
            }
            else                            //窗体存在
            { 
                frm.TopMost = true;
                frm.Show();
                MessageBox.Show(frm.textEdit1.Text);
            }

        }


原文地址:https://www.cnblogs.com/dengshiwei/p/4258747.html