Как вызвать что-то, когда 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
}
}