您必須使用擴展窗口樣式,此代碼顯示如何執行此操作。
該表單將鼠標交互傳遞給它後面的表單,並且即使其他Top Top窗口處於活動狀態,也會顯示爲TopMost。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
const int GWL_EXSTYLE = -20;
const int WS_EX_TRANSPARENT = 0x20;
[DllImport("user32.dll", CharSet=CharSet.Auto)]
extern static int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static int SetWindowLong(IntPtr hWnd, int nIndex, int nStyle);
private void Form1_Load(object sender, EventArgs e)
{
var style = GetWindowLong(this.Handle, GWL_EXSTYLE);
var newStyle = style | WS_EX_TRANSPARENT;
SetWindowLong(this.Handle, GWL_EXSTYLE, newStyle);
}
private void timer1_Tick(object sender, EventArgs e)
{
this.BringToFront();
}
}
這將是一個小技巧,爲用戶與表單交互,必須提供更多的細節你正在試圖做什麼,所以我們可以提供幫助。
爲了始終顯示您的窗口在上面,放置一個間隔爲100ms的計時器,並將表單屬性TopMost設置爲true。
您是否期待它位於其他程序的頂部?始終處於最佳狀態,還是隻處於未設置爲最佳狀態的程序之上?前者你無法真正做到,後者當然。 – Servy
最好在每個程序之上,但是在未設置爲始終處於最前的程序之上可能也會起作用。 – user3599771
當你說設置「TopMost」不起作用時,它以什麼方式不起作用,因爲那應該完全符合你的需求? – Servy