.NET调整大小事件:如何获取旧尺寸?

10
我已经为我的小部件添加了调整大小事件,代码如下:

void glControl_Resize(object sender, EventArgs e) {

有没有一种方式可以获取小部件在调整大小之前的旧尺寸?也许我可以将 e 强制转换为一些可以提供更多信息的内容?还是应该在该事件期间保存它?


如果你想在 Windows 实际执行调整大小之前获取事件,可以重写 WndProc 并捕获正确的消息。我不确定是哪一个消息,但这是获取“调整大小之前”唯一的方法。 - n4pgamer
2个回答

15

是的,只需在类字段中跟踪旧大小即可得到简单的解决方案。例如:

Size mOldSize;

private void glControl_Resize(object sender, EventArgs e) {
  if (mOldSize != Size.Empty && mOldSize != glControl.Size) {
    // do something...
  }
  mOldSize = glControl.Size;
}

2
按照惯例,您应该添加一个“OnResizing”事件,它在更改大小之前但尚未更改时触发,然后在调整大小后触发“OnResize”。您可以从“OnResizing”事件中的“EventArg”中获取旧值。
编辑:
您是在创建自己的事件还是触发包含控件的事件?
如果您正在创建自己的事件,可以从“EventArg”派生出类似于“ResizeEventArg”的内容,其中包括您想要的大小。
我将使用“ResizeEventArg”来处理“Resize”和“OnResizing”事件,并仍然遵循我之前说的内容。
或者,如果您知道控件的类型,则可以将“Object sender”转换为该类型,然后读取属性。

我没有创建自己的事件。它也没有 OnResizing 事件?似乎没有任何东西有 OnResizing 事件?我在我的主窗体上看到一个 ResizeBegin,但这是一个 Tao.Platform.Windows.SimpleOpenGlControl,似乎都没有。看来我无法解决了。还是谢谢。将来有用。 - mpen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接