![](/img/trans.png)
[英]How do I keep .NET 4.6.2 MenuStrip visible above application workspace (when programming in C#)
[英]How do you keep a .NET form always above another application?
我有一個作為主應用程序運行的C ++應用程序。 .NET應用程序也是並行運行的,我通過套接字進行進程間通信。 如何在.NET應用程序上面維護.NET主窗體?
方法:
目前我設置了TopMost = true
但是當您打開另一個應用程序時會出現問題:.NET應用程序出現在所有其他應用程序之上。
另一種方法是檢查LostFocus
,如果用戶點擊了C ++應用程序,然后將.NET應用程序帶到前台,如果用戶切換到另一個應用程序,則不執行任何操作。
有任何想法嗎? 以前做過這件事嗎? 我在Paint.NET中看到了類似的效果,其中工具調色板保留在另一個窗口的頂部。
在顯示之前,您是否嘗試將C ++窗口作為.NET表單的所有者 ? 窗口句柄是會話全局的,因此您可以通過IPC進行通信。 並且Show方法接受任何IWin32Window
作為所有者。 從MSDN頁面:
當表單由另一個表單擁有時,它將被所有者表單關閉或隱藏。 例如,考慮一個名為Form2的表單,該表單由名為Form1的表單擁有。 如果Form1關閉或最小化,Form2也會關閉或隱藏。 擁有的表單也不會在其所有者表單后面顯示。
回復評論 :
也許這還不夠清楚: Owner
屬性是Form
類型,所以一旦表單可見,你就無法為它分配任何IWin32Window
對象。 但Form.Show
確實接受IWin32Window
所有者參數 - 因此您可以在首次顯示表單時將所有者設置為任何窗口。 我在Reflector中查看了Form.Show
,據我所見,它應該處理任何IWin32Window
參數,即使它不是Form
。
如果您需要在第一次調用Form.Show
之后設置窗口所有者,那么您可能必須使用PInvoke SetWindowLong
( 如本答案中所述 )。 這就是Form.Show
作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.