簡體   English   中英

如何將.NET表單始終保持在另一個應用程序之上?

[英]How do you keep a .NET form always above another application?

我有一個作為主應用程序運行的C ++應用程序。 .NET應用程序也是並行運行的,我通過套接字進行進程間通信。 如何在.NET應用程序上面維護.NET主窗體?

方法:

  • 目前我設置了TopMost = true但是當您打開另一個應用程序時會出現問題:.NET應用程序出現在所有其他應用程序之上。

  • 另一種方法是檢查LostFocus ,如果用戶點擊了C ++應用程序,然后將.NET應用程序帶到前台,如果用戶切換到另一個應用程序,則不執行任何操作。

有任何想法嗎? 以前做過這件事嗎? 我在Paint.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM