C# показываем окно в фоне
В C# существует ограничение на задание режима показа окна. В Visual Studio в свойстве формы TopMost можно установить только два значения. При этом форма при появлении будет всегда активна. Т.е. переведет на себя фокус ввода. Например, такая ситуация: приложение «висит» в трее и показывает всплывающие окна, типа таких, которые показывает ICQ при получении сообщения. Если пользоваться стандартными возможностями .NET, то реализовать окно, которые не будет перехватывать фокус ввода, не получится. На помощь приходят старые знакомые функции WINAPI, которые выполняются с параметрами SW_SHOWNOACTIVATE и SWP_NOACTIVATE.
Теперь создайте новую форму и пропишите следующий код:
//подключаем возможность использовать WinApi-функции
using System.Runtime.InteropServices;
...
//задаем константы
private const int SW_SHOWNOACTIVATE = 4; //неактивна
private const int HWND_TOPMOST = -1; //поверх всех окон, включая топовые
private const uint SWP_NOACTIVATE = 0x0010;
//функция winapi показывает окно
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
//функция winapi показывает окно
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
static extern bool SetWindowPos(int hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
public void ShowWindow()
{
ShowWindow(Handle, SW_SHOWNOACTIVATE);
SetWindowPos(Handle.ToInt32(), HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE);
}
Этого достаточно, чтобы создать окно, которое будет поверх всех остальных окон, но не будет активно.
Вызывать нашу форму можно так (где frmTip — это название нашей формы, которую будем показывать):
frmTip frm = new frmTip(); frm.ShowWindow();
Популярность: 26%
Если у вас возникли вопросы, вы можете оставить их в комментариях


Отлично, то что искал!
Спасибо. Работает.
Спасибо за помощь!
Огромное спасибо!
Подскажите, почему текст передаваемый в конструктор формы не отображается в форме… хотя если вызвать MessageBox.Show(textBox1.Text) внутри ShowWindow()
то в момент появления сообщения текст таки проявляется…. а если MessageBox не вызывать то textBox1 пуст…
Трудно ответить на ваш вопрос не видя кода. Скиньте часть кода формы, которая должна быть не в фоне.
я отправил вам на почту свою ситуацию с примером кода… надеюсь это поможет понять причину этого странного поведения…