最大化/正常时触发OnResize

时间:2014-10-16 23:18:43

标签: c# forms resize windowstate

我想进入这里:

Protected override void OnResize(EventArgs e)
{

}

当我将WindowState更改为Maximize / Normal时。我该怎么做?

2 个答案:

答案 0 :(得分:1)

为什么要特别想要这种方法?当WindowState更改时,将调用OnClientSizeChanged()方法,您应该可以在那里进行相同类型的工作。

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

例如:

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
    }
}

答案 1 :(得分:0)

如果您必须使用该覆盖,您可以这样做:

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
}

或者,将您的代码放入Resize事件(正常的'方式):

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Maximized || 
        this.WindowState == FormWindowState.Normal)
    {
        // Do something here
    }
}