c# - 如何从子窗体设置父窗体 WindowState 属性?

标签 c# winforms

我的 C# 应用程序有两种形式。主窗体将其 ControlBox 设置为 false,然后创建第二个窗体,如下所示:

this.ControlBox = false;
new Form2().Show();

第二种形式能够最小化和最大化。我需要主窗体 WindowState 属性能够在窗口最小化 或返回其正常 状态时从子窗体进行设置。

我遇到的问题是当我尝试最小化子窗口时程序崩溃。

这是我的代码:

private void Form2_SizeChanged(object sender, EventArgs e)
{
    if(this.WindowState != FormWindowState.Maximized)
        this.Parent.WindowState = this.WindowState;
}

我该如何解决这个问题?

最佳答案

您的问题是 Form2 Parent 属性为 null,调用 Show() 方法实际上并未设置 Parent 所显示表单的属性(在调试器中检查)。最简单的解决方法是通过 Form2(称为 Form)的构造函数传递 Form1(调用 Form)引用然后使用该引用来设置 WindowState 属性。像这样:

public partial class Form2 : Form
{
    Form1 form1;
    public Form2(Form1 frm)
    {
        InitializeComponent();
        form1 = frm;
        this.SizeChanged +=Form2_SizeChanged;
    }

    private void Form2_SizeChanged(object sender, EventArgs e)
    {
        if (this.WindowState != FormWindowState.Maximized)
            form1.WindowState = this.WindowState;
    }
} 

与 Form1 的代码相比,您可以更改为:

this.ControlBox = false;
Form2 frm = new Form2(this);
frm.Show();

关于c# - 如何从子窗体设置父窗体 WindowState 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203839/

相关文章:

c# - 删除(x);它会处理元素 x 吗?

c# - 如何训练使用我的代码实现 system.speech 和 SpeechRecognitionEngine 的用户

c# - 重构 “procedural” WCF服务

c# - 添加 View 上下文菜单项消失了

c# - 维护排序顺序的集合 C#

c# - 无法加载文件或程序集 'Microsoft.SqlServer.Types,版本 = 11.0.0.0

c# - 在 Canvas 内实例化预制件

c# - RSS 提要中以 "//"开头的 URL 未加载到 WebBrowser 控件中

c# - 如何添加自定义时间格式?

c# - 更新数据库中的第一行 C# mysql