C#怎样在执行最上面的窗体的时候不能执行其他的窗体

如题所述

C#显示窗体方式分为模态与非模态两种,在模态显示时除非关闭窗体否则鼠标只能在软件的当前窗体操作。

使用form.ShowDialog();以模态方式显示;form.Show()为非模态显示。

下例中的Form1使用模态方式调用Form2,非模态就是在Form1中的form.ShowDialog();改为form.Show(); VS2010 winform的例子

namespace TestForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.ShowDialog();
            checkBox1.Checked = form.sel1;
            checkBox2.Checked = form.sel2;
        }
    }
}

namespace TestForm
{
    public partial class Form2 : Form
    {
        public Boolean sel1;
        public Boolean sel2;
        public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            sel1 = true;
            sel2 = true;
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-02-06
在Form1里面写一个方法,用来修改label
在Form2里面写:
public delegate void SetMainFormTopMostHandle(bool topmost);
public event SetMainFormTopMostHandle SetMainFormTopMost;
声明一个委托和事件
然后在f2.Show()打开f2之前,加一句:
Form2 f2 = new Form2 ();

f2.SetMainFormTopMost += new Form2.SetMainFormTopMostHandle(MainForm_SetMainFormTopMost);
f2.Show();
这里面MainForm_SetMainFormTopMost就是你用来修改label的方法(回调函数)
SetMainFormTopMostHandle、SetMainFormTopMost你自己写名字
大致就是为f2创建一个用来修改label的事件,然后把修改label的方法绑定到这个事件上,启动f2,在f2中执行这个事件,就是SetMainFormTopMost(true)这样写 (参数要和委托的那个声明一致)
那么就会调用F1中绑定的那个方法

f2.SetMainFormTopMost += new Form2.SetMainFormTopMostHandle(MainForm_SetMainFormTopMost);
第2个回答  2011-06-25
再调用上面的那个窗体的时候将上面的床窗体设置成模式窗体就可以了!关键字是:ShowDialog()
第3个回答  2011-06-25
大概好像看懂你的意思了,
你是想在显示子窗体的时候,把父窗体禁用是吧
显示的时候用ShowModal() 就可以了不用Show()

又好像是ShowDialog().你都试试吧本回答被提问者采纳
第4个回答  2015-12-22
ShowDialog()就可以了。模式对话框