2014-12-07 2 views
0

Я смотрю на этом сайте и в Google, но ничего не нашел. Мне нужно показать форму, содержащую некоторую информацию о контроле, но вам не нужно красть фокус на других окнах (например, оконная игра с полным экраном) И можете использовать текстовое поле внутри формы, чтобы писать, не крадя фокус игрового окна.TopMost активен, но без фокуса

Я могу открыть окно без кражи фокуса с помощью этого: Opening a WinForm with TopMost=true but not having it steal focus?

Но когда я нажимаю в окне, получить фокус. Мне нужно сделать окно активным, а текстовое поле доступно для записи, но без кражи других фокусов Windows Возможно?

+1

Боюсь, что нет, вы не можете иметь записываемый текстовое поле без внимания, как будет ли это работать? – walther

+0

Когда пользователь нажимает на элемент управления и записывает его, он будет иметь фокус. Но в скором времени, когда он/она будет набирать текст, вы можете закрыть форму. Затем вы можете открыть другой, который выглядит точно так же и не имеет фокуса, используя трюки, на которые вы ссылались. – RenniePet

ответ

0

Мне нужно, чтобы показать форму содержат некоторый контроль показать информацию, но нужно, чтобы DonT украсть фокус на другие окна ... Но когда я нажимаю в окне, получить фокус.

Так это звучит для меня, как вы хотите, регулярное окно, но только не перехватывать фокус, когда это первый отображается?

Вместо того, чтобы использовать встроенный в Form.Show(), используйте ShowWindow() API с SW_SHOWNA:

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

+0

Как уже говорилось, для ввода текста в текстовое поле требуется фокус. То, о чем вы просите **, не ** идет вместе. –

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); 
} 
Смежные вопросы