有沒有辦法讓窗口保持非活動狀態,即使它包含焦點?我有兩種形式(A和B)。在用戶與A交互之後,我將焦點轉移回B.焦點轉移的結果(用戶點擊A,然後焦點轉移回B)是表單A從活動狀態閃爍到非活動狀態。這看起來很醜陋(尤其是在Vista上,瞬間會有更大的影子)。我如何讓A保持非活動狀態,以避免這種閃爍現象?即使在激活時仍保持窗口無效外觀
回答
最後,我找到了答案!
警告:請勿濫用此答案的技術。這樣做會混淆您的用戶,並且會損害一般的計算體驗。下面描述的技術在某些情況下可能非常有用(例如,實施類似智能感知的行爲),但請在您的使用中明智。
WM_NCACTIVATE消息被髮送到一個窗口,將其非客戶區域(即邊界和標題欄)的狀態更改爲非活動或活動狀態。消息的wParam指示狀態是否處於非活動狀態或活動狀態。如果wParam爲真(值爲1),該窗口將顯示爲活動狀態。如果wParam爲假(值爲0),該窗口將看起來無效。要強制一個窗口保持不活動狀態或活動狀態,通過將wParam設置爲相應的值(0或1)來覆蓋wParam,並且您將全部設置!
private const int WM_NCACTIVATE = 0x0086;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCACTIVATE)
{
// Use this to make it always look inactive:
m.WParam = (IntPtr)0;
// Alternately, use this to make it always look active:
m.WParam = (IntPtr)1;
}
base.WndProc(ref m);
}
您正在討論更改gui模型的默認行爲。我不會建議這樣做。如果用戶在A上做某事,那麼回到B不應該A消失?爲什麼它「閃爍」?焦點改變發生時,它應該是一個單一的開關。
無法從你的描述說是焦點切換,如:
A-> B
B-> A->用戶點擊 - >乙
B-> A
?
不知道這是否有幫助,但Winforms支持自有表單的概念。例如,即使浮動工具欄位於頂層窗口之外,即使頂層窗口處於活動狀態(反之亦然),它們仍保持活動狀態。同樣的,你希望用戶能夠與您的形式的互動,而無需停用形式B.
要做到這一點,這聽起來像你需要調用b.AddOwnedForm(a)
您展示a
之前。
我嘗試了你的建議,但不幸的是,擁有窗口和父窗口之間的焦點切換仍然將窗口的外觀從不活動變爲活動。 – 2009-05-02 20:17:38
- 1. 無法激活Excel窗口
- 2. 激活窗口
- 3. Python窗口激活
- 4. NSPopover顯示了即使在主窗口沒有激活
- 5. popup沒有激活窗口被激活
- 6. 窗口激活三個窗口同名
- 7. 從彈出窗口激活父窗口
- 8. HTML - 無效輸入並點擊外部時保持活動
- 9. 窗口未激活時的Java輸入
- 10. wpf窗口未激活
- 11. 彈出窗口被激活
- 12. VBA激活Internet Explorer窗口
- 13. 可可:激活窗口:shouldPopUpDocumentPathMenu:?
- 14. 從gitbash激活pyvenv窗口
- 15. 如何激活窗口
- 16. 激活控制檯窗口
- 17. 使div仍然保持,即使點擊
- 18. 即使在語法錯誤時仍保持簡單服務器活動
- 19. 即使nsmangedobject已被刪除,仍然保持活動狀態
- 20. 使用VBA從Excel激活Word窗口
- 21. 如何使用Nircmd激活子窗口?
- 22. 當窗口很小時調整窗口大小,即使窗口寬度較大時也保持不變
- 23. Django - 即使數據無效,ModelForm仍在保存
- 24. 激活facebook即時文章
- 25. 即使我關閉窗口,如何保持img保存到PictureBox
- 26. Qt:即使在失去焦點時仍將子窗口保留在父窗口之上
- 27. 如何使Visual Studio窗口在激活時突出顯示?
- 28. 如何在Java中激活窗口?
- 29. Python:激活窗口在OS X
- 30. 無序列表下拉子菜單 - 保持激活點擊時
我想模仿VisualStudio的intellisense。 A是建議窗口,B是用戶輸入文本的位置。用戶點擊A(更改選定的建議等)後,我會自動將焦點設置回B,以便用戶不必手動設置焦點即可繼續輸入。焦點轉移是這樣的:焦點在B上設置,用戶在A上點擊,在鼠標上時我將焦點設置回B.瞬間獲得焦點,導致焦點閃爍(或閃爍),我想停止。 – 2009-05-02 20:11:35