Как вызвать что-то, когда WindowState изменяется в C#?

поэтому я хочу мгновенно, так как эта часть программы зависит от скорости, вызвать функцию, когда windowstate изменяется в моей основной форме. Мне нужно, чтобы это было что-то вроде этого:

private void goButton_Click(object sender, EventArgs e)
{
   //Code
}

Я проверил вкладку событий формы, у меня нет WindowStateChanged и т. д. Как мне это сделать?

форма будет сильно изменена, поэтому проверка, когда изменения размера не будут работать.

4 ответов


на изменение размера событие (или SizeChanged) будет срабатывать при изменении WindowState.


на боковой ноте WPF включает StateChanged событие для этого напрямую.


надеюсь, я не опоздал на вечеринку.

то, как я решил реализовать его, довольно прямолинейно и не требует выделения глобальных переменных, просто проверьте форму WindowState значение до и после base.WndProc называется:

    protected override void WndProc(ref Message m)
    {
        FormWindowState org = this.WindowState;
        base.WndProc(ref m);
        if (this.WindowState != org)
            this.OnFormWindowStateChanged(EventArgs.Empty);
    }

    protected virtual void OnFormWindowStateChanged(EventArgs e)
    {
        // Do your stuff
    }

суть - это работает.


вы можете попробовать переопределить


вы можете проверить состояние окна формы из другого потока, используя это. Это работает в .Net Framework 3.5

Invoke(new Action(() => { this.WindowState = FormWindowState.Normal; }));

Я надеюсь, это может помочь вам.

public partial class Form1 : Form {
private FormWindowState mLastState;
public Form1() {
  InitializeComponent();
  mLastState = this.WindowState;
}
protected override void OnClientSizeChanged(EventArgs e) {
  if (this.WindowState != mLastState) {
    mLastState = this.WindowState;
    OnWindowStateChanged(e);
  }
  base.OnClientSizeChanged(e);
}
protected void OnWindowStateChanged(EventArgs e) {
  // Do your stuff
}
}