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

本文关键字:表单 活动状态 第二个 | 更新日期: 2023-09-27 18:33:06

我有两个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;
    }
}

虽然这保留了第二个表单。 它仍然允许单击和处理第一个表单。

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

使用 frmRecordTranslation.ShowDialog(

) 而不是 frmRecordTranslation.Show()。这会将您的第二个形式显示为模态对话框。

而不是调用Form.Show(),就像这样:

frmRecordTranslation.Show();

调用ShowDialog()方法。 ShowDialog指定要显示的表单是模式对话框 - 即。显示对话框时无法与表单交互,与消息框(使用 MessageBox.Show 显示时)非常相似。

还有用于此目的的 ShowDialog(Form) (MSDN)。

此外,Show()方法具有重载 (MSDN),它采用另一种形式作为父级。

那么,应该不需要

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

任何更多。但是在这种情况下仍将启用父表单(只是消除了TopMost的需要)。