c# - Windows.Forms,显示非模式状态下的禁用表单

标签 c# .net winforms

我在非模态状态下显示禁用的表单时遇到一些问题。这是示例代码:

public partial class Form1 : Form
{
    // ....
    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            Form2 form = new Form2();
            form.Enabled = false;
            form.Show();    // works, but form has no owner
            // form.Show(this); // gives an System.InvalidOperationException
            // ...
            // ... my program here shows a message box, ask user for something
            // ... while 'form' is shown in the background 
            form.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }
}

知道为什么 Show()(没有参数)有效,但 Show(this) 给出了一个异常(exception)吗?在我的场景中,form 必须知道它的所有者才能正确显示,因此我可以执行以下操作:

            form.Enabled = false;
            form.Owner=this;
            form.Show();

但这真的是一个好的解决方案吗?

编辑:感谢您的快速回答。看来我们真的在这里发现了框架中的错误。尽管有您的建议,但我想我会坚持我的解决方案,因为在“显示”之后禁用表单会给用户带来难看的可见效果。

最佳答案

这是一个经典的剪切和粘贴错误。看起来他们复制了 ShowDialog() 的代码,将禁用的表单显示为对话框确实是无效的。用户将被卡住,无法再做任何事情。但是他们忘记删除 Show() 方法中的测试。只需在 Show() 调用后禁用它即可。

关于c# - Windows.Forms,显示非模式状态下的禁用表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094930/

相关文章:

c# - C#中数据表的内部连接

c# - .Net Framework 4 语音识别——使用小语法时的误报

c# - 如何同步文本框和列表框的滚动

c# - 使用 Miterjoin 围绕引导线创建线

c# ToList() 和 ToString()

c# - 错误 XDG0008 : NumberBox is not supported in a Universal Windows Platform project

c# - 具有依赖注入(inject)的 CQRS

c# - 如何读取字符串中的字符作为它们的 UTF-32 十进制值?

.net - 嵌套 TransactionScope 和/或嵌套连接导致 MSDTC 升级

c# - 从指定时间开始秒表