2016-09-23 115 views
1

在我的應用程序中,通過拖動角來調整窗體大小時會觸發ResizeEnd事件。但點擊最大化按鈕時不會觸發。通過Resize事件,我已經實現了這種情況,但是我對此事件有一些問題。所以我需要使用ResizeEnd事件,請任何人都建議我爲什麼這個事件不會觸發,同時調整最大化按鈕的形式?或者向我推薦任何替代品。通過最大化按鈕調整窗體大小時,不會觸發ResizeEnd事件?

在此先感謝。

回答

3

當用戶完成表單大小調整時(通常通過拖動位於表單右下角的一個邊框或大小調整手柄,然後釋放它),會引發ResizeEnd事件。當用戶移動表單時也會引發此問題。

如果由於某種原因,你需要最大化窗口事業提高ResizeEnd事件可以引發事件是這樣的:

const int WM_SYSCOMMAND = 0x0112; 
const int SC_MAXIMIZE = 0xF030; 
protected override void WndProc(ref Message m) 
{ 
    base.WndProc(ref m); 
    if (m.Msg == WM_SYSCOMMAND) 
    { 
     if (m.WParam == (IntPtr)SC_MAXIMIZE) 
     { 
      //the window has been maximized 
      this.OnResizeEnd(EventArgs.Empty); 
     } 
    } 
} 

  • Resize事件也時引發的形式是最大化。
  • 如果您想處理自定義佈局,則Layout事件是一個合適的事件。
+0

嗨Reza,謝謝你的回答。在我的來源中,我使用Form作爲屬性。所以我不能通過Form訪問OnResizeEnd方法。 – Prithiv

+0

嗨,不客氣:)如果這種形式是你的一種形式,你可以簡單地將這些代碼添加到你的應用程序的所有形式的通用基礎表單中。但是,如果它不是你的表單,並且你不能訪問其非公共成員來重寫'WndProc'並調用'OnResizeEnd',那麼你也可以爲另一個你無權訪問的'Form'應用類似的解決方案這是非公開的方法。 –

+1

謝謝你。很有幫助。如果有人想知道,我還添加了這樣的事實,即在恢復時也觸發'const int SC_RESTORE = 0xF120'。 –

相關問題