如何在第二个表单处于活动状态时禁用表单

时间:2014-12-04 20:35:56

标签: c# winforms

我有两个Windows窗体:FormMain和FormRecordTranslation。我在FormMain上有一个菜单项。当我单击该项目时,我应该看到FormRecordTranslation表单,并且只要我正在处理第二个表单,就必须停用FormMain,即不可点击。当我关闭第二个表格时,第一个表格必须可用。为此,我在FormMain类中使用了以下代码。

    public partial class FormMain : Form
{
    public FormMain()
    {
        InitializeComponent();
    }

    private void recordTranslationToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FormRecordTranslation frmRecordTranslation = new FormRecordTranslation();
        frmRecordTranslation.Activate();
        frmRecordTranslation.Show();
        frmRecordTranslation.TopMost = true;
    }
}

虽然这将第二种形式放在首位。它仍然允许点击和处理第一个表单。

3 个答案:

答案 0 :(得分:3)

使用frmRecordTranslation.ShowDialog()代替frmRecordTranslation.Show()。这将显示您的第二个格式作为模态对话框。

答案 1 :(得分:0)

此目的还有ShowDialog(Form) (MSDN)

此外,Show()方法有一个overload (MSDN),它将另一种形式作为父级。

然后,应该不需要

frmRecordTranslation.Activate();
frmRecordTranslation.TopMost = true;

了。但在这种情况下仍然会启用父表单(只需消除TopMost)的需要。

答案 2 :(得分:0)

而不是像Form.Show()那样打电话:

frmRecordTranslation.Show();

调用ShowDialog()方法。 ShowDialog指定要显示的表单是模式对话框 - 即。显示对话框时无法与表单进行交互,就像消息框一样(使用MessageBox.Show显示时)。