Возникает ли событие в C # при восстановлении окна? - PullRequest
9 голосов
/ 04 января 2011

Есть ли какое-либо событие, которое возникает, когда окно восстанавливается в C # /. NET?

Я заметил, что есть событие, которое возникает, когда окно активировано, но я не могу найтисоответствующее событие для восстанавливаемого окна, например, из развернутого или свернутого состояния.

Ответы [ 7 ]

15 голосов
/ 04 января 2011

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

Вам нужно будет переопределить процедуру окна вашей формы (WndProc) и прослушать сообщение WM_SYSCOMMAND , указывающее SC_RESTORE. Например:

protected override void WndProc(ref Message m)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_RESTORE = 0xF120;

    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_RESTORE)
    {
        // Do whatever processing you need here, or raise an event
        // ...
        MessageBox.Show("Window was restored");
    }

    base.WndProc(ref m);
}
3 голосов
/ 04 января 2011

Вы можете проверить это так:

private void Form1_Resize(object sender, EventArgs e)
{
   if (this.WindowState == FormWindowState.Minimized)
   {
       ...
   }
   else if ....
   {
   }
}
2 голосов
/ 04 января 2011

Довольно неуверенно. Вам нужно обработать событие SizeChanged и определить, изменилось ли значение WindowState с Minimized на Normal или Maximized на Normal. Источник

1 голос
/ 24 января 2016

Я знаю, что этот вопрос довольно старый, но он работает следующим образом:

public Form1()
{
    InitializeComponent();
    this.SizeChanged += new EventHandler(Form1_WindowStateTrigger);
}

private void Form1_WindowStateTrigger(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        MessageBox.Show("FORM1 MINIMIZED!");
    }

    if (this.WindowState == FormWindowState.Normal)
    {
        MessageBox.Show("FORM1 RESTORED!");
    }

    if (this.WindowState == FormWindowState.Maximized)
    {
        MessageBox.Show("FORM1 MAXIMIZED!");
    }
}

Использование события SizeChanged в сочетании с проверкой WindowState решает проблему.

0 голосов
/ 21 апреля 2016

Ответ от Редхарта хороший.Это то же самое, но немного проще:

public Form1()
{
    InitializeComponent();
    this.SizeChanged += Form1_SizeChanged;
}

#region Event-Handlers
void Form1_SizeChanged(object sender, EventArgs e)
{
    var state = this.WindowState;
    switch (state)
    {
        case FormWindowState.Maximized:
            ClearMyView();
            DisplayMyStuff();
            break;
        case FormWindowState.Minimized:
            break;
        case FormWindowState.Normal:
            ClearMyView();
            DisplayMyStuff();
            break;
        default:
            break;
    }
}
#endregion Event-Handlers
0 голосов
/ 16 сентября 2014

Достаточно просто добавить:

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
    }

перейти по этой ссылке winforms-windowstate-изменено-как-обнаружить-это?

0 голосов
/ 08 мая 2012

Проверка:

private void Form1_Activated(Object o, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized) {
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...