【发布时间】:2014-10-16 23:18:42
【问题描述】:
我想进去:
Protected override void OnResize(EventArgs e)
{
}
当我将 WindowState 更改为最大化/正常时。我该怎么做?
【问题讨论】:
标签: c# forms resize windowstate
我想进去:
Protected override void OnResize(EventArgs e)
{
}
当我将 WindowState 更改为最大化/正常时。我该怎么做?
【问题讨论】:
标签: c# forms resize windowstate
你为什么特别想要那个方法? OnClientSizeChanged() 方法在 WindowState 改变时被调用,你应该可以在那里做同样的工作。
请注意,如果您实际上需要知道调用该方法是因为 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
}
}
【讨论】:
protected override void OnClientSizeChanged(EventArgs e)
如果您必须使用该覆盖,您可以这样做:
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
}
}
【讨论】: