2012-01-13 20 views
2

我遇到的是我希望你罰款的思想家可以克服一個一個問題...Alt鍵原因形成重繪

出於某種原因,一旦我已經裝了我的Windows窗體,如果用戶按下Alt鍵,表單重繪導致閃光。

這隻發生在第一次,所以任何後續的按鍵Alt鍵什麼也不做。

我沒有任何處理按鍵的菜單條或事件,所以我只能假設它是我沒有設置的設置,或者是我在不知情的情況下設置的設置。

僅供參考,形式確實在構造

DoubleBuffered = true; 
SetStyle(ControlStyles.OptimizedDoubleBuffer | 
     ControlStyles.AllPaintingInWmPaint, true); 

以下。這是因爲我有許多面板和標籤也做同樣實行透明的。

手指交叉,一個你就會知道爲什麼;)

+0

好吧,按Alt鍵會將焦點放在系統菜單上。這也可能導致WM_PAINT消息。 – Joey 2012-01-13 09:31:11

+0

@Joey:我以爲是這樣,你知道一種防止這種情況的方法嗎?謝謝;) – Gavin 2012-01-13 09:35:19

+0

我還沒有看到這種行爲在默認窗體和按鈕導致我懷疑自定義控件。 你可以嘗試和刪除屏幕上的一半控件,看看是否重繪仍然發生?刪除另一半,並簡單地查找哪個控件導致閃爍。 – CodingBarfield 2012-01-13 09:48:32

回答

7

這段代碼粘貼到您的形式:

protected override void WndProc(ref Message m) { 
     // Suppress the WM_UPDATEUISTATE message 
     if (m.Msg == 0x128) return; 
     base.WndProc(ref m); 
    } 

它運作良好,抑制塗料,當我嘗試過。 Windows中的焦點提示處理相當怪異,請進行徹底測試以確保其不會出現意想不到的副作用。

+0

謝謝漢斯!我只是將它基於我的Form基類,並立即改善了情況。我會有更進一步的小提琴,但到目前爲止它看起來非常有前途!再次感謝你! – Gavin 2012-01-13 14:25:05