2014-12-07 72 views
0

我在這個網站和谷歌,但沒有發現什麼。 我需要顯示一個包含一些控件顯示信息的表單,但是不需要將焦點偷到其他窗口(如窗口全屏遊戲),並且可以使用表單內的文本框進行寫入,而無需竊取遊戲窗口焦點。TopMost積極但沒有焦點

我可以發射窗口,而不偷焦點採用這樣的:Opening a WinForm with TopMost=true but not having it steal focus?

但是,當我在窗口中單擊,獲得焦點。我需要使窗口處於活動狀態,並且文本框可以寫入,但不會竊取其他窗口焦點 這可能嗎?

+1

恐怕不行,你不能有一個可寫文本框沒有焦點,如何甚至可以工作嗎? – walther 2014-12-07 17:04:51

+0

當用戶點擊控件並寫入控件時,它將有焦點。但是一旦他/她完成了輸入,你可以關閉表格。然後,您可以使用您引用的技巧打開另一個看起來完全相同並且沒有焦點的人。 – RenniePet 2014-12-07 19:08:21

回答

0

我需要顯示一個表單包含一些控制節目信息,但需要向 偷不聚焦到其他窗口 ... 但是,當我在窗口中單擊,獲得焦點。

所以它聽起來像你對我想要一個普通窗口,但只有當它是第一顯示的不偷焦點?

除了使用內置Form.Show(),請使用SW_SHOWNA的的ShowWindow()API的:

private const int SW_SHOWNA = 4; 

[System.Runtime.InteropServices.DllImport("user32.dll")] 
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

private void ShowWindowWithoutFocus() 
{ 
    ShowWindow(this.Handle, SW_SHOWNA); 
} 
+0

我需要的窗口不要偷別人的焦點,但允許使用 – Zenth 2014-12-07 19:08:01

+0

內的控件如前所述,鍵入文本框窗口需要關注。你要求的東西**不會**在一起。 – 2014-12-07 19:26:15

0
// Sets the window to be foreground 
[DllImport("user32.dll")] 
private static extern int SetForegroundWindow(IntPtr hwnd); 

/// <summary> 
/// onVisible focus input username text box 
/// </summary> 
protected override void OnVisibleChanged(EventArgs e) 
{ 
    SetForegroundWindow(this.Handle); 
    base.OnVisibleChanged(e); 
}