C# 最大化/正常时触发OnResize

C# 最大化/正常时触发OnResize,c#,forms,resize,windowstate,C#,Forms,Resize,Windowstate,我想进去这里: Protected override void OnResize(EventArgs e) { } 当我将WindowsState更改为最大化/正常时。我如何做到这一点?您为什么特别想要这种方法?当WindowsState更改时,将调用OnClientSizeChanged()方法,您应该能够在那里执行相同的工作 请注意,如果您确实需要知道该方法是由于WindowsState更改而不是用户调整窗口大小而被调用的,那么添加一个设置为当前WindowsState值的私有字段非常简

我想进去这里:

Protected override void OnResize(EventArgs e)
{

}

当我将WindowsState更改为最大化/正常时。我如何做到这一点?

您为什么特别想要这种方法?当WindowsState更改时,将调用OnClientSizeChanged()方法,您应该能够在那里执行相同的工作

请注意,如果您确实需要知道该方法是由于WindowsState更改而不是用户调整窗口大小而被调用的,那么添加一个设置为当前WindowsState值的私有字段非常简单,在OnClientSizeChanged()方法中,将该字段与实际的WindowsState值进行比较

例如:

private FormWindowState _lastWindowState;

protected override void OnClientSizeChanged(EventArgs e)
{
    base.OnClientSizeChanged(e);

    if (WindowState != _lastWindowState)
    {
        _lastWindowState = WindowState;

        // Do whatever work here you would have done in OnResize
    }
}

如果必须使用该覆盖,可以执行以下操作:

protected override void OnResize(EventArgs e)
{
    if (this.WindowState == FormWindowState.Maximized || 
        this.WindowState == FormWindowState.Normal)
    {
        // Do something here
    }

    // You should probably call the base implementation too
    base.OnResize(e);

    // Note that calling base.OnResize will trigger 
    // Form1_Resize(object sender, EventArgs e)
    // which is normally where you handle resize events
}
或者,将代码放入调整大小事件(这是“正常”的方式):


我不知道你的意思,我真的不太擅长编程。但是OnResize中的内容不能放在另一个函数中,所以这就是为什么在最大化/正常时需要触发OnResize。为什么不能从OnClientSizeChanged()调用OnResize中的代码?如何添加OnClientSizeChanged()?我在Events中找不到它。OnClientSizeChanged()是基类上的一个方法。通过键入:
protectedoverride void OnClientSizeChanged(EventArgs e)
private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Maximized || 
        this.WindowState == FormWindowState.Normal)
    {
        // Do something here
    }
}