Как предотвратить потерю фокуса исходной формы при показе другой формы? - PullRequest
1 голос
/ 13 января 2011

У меня проблема с тем, что моя основная форма теряет фокус при открытии новой формы. Я знаю, что могу вернуть фокус обратно с помощью mainForm.focus(), но как мне справиться, если я хочу, чтобы основная форма никогда не теряла фокус при открытии нового окна?

Ответы [ 2 ]

5 голосов
/ 13 января 2011

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

1 голос
/ 13 января 2011

Коди Грей ответил на это, я просто расширяю его, напрямую вставляя код.Кто-то с правами на редактирование может скопировать его туда и удалить, если мне все равно;)

Метод ShowWindow pinvoke.net .:

    private const int SW_SHOWNOACTIVATE = 4;
    private const int HWND_TOPMOST = -1;
    private const uint SWP_NOACTIVATE = 0x0010;

    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    static extern bool SetWindowPos(
         int hWnd,           // window handle
         int hWndInsertAfter,    // placement-order handle
         int X,          // horizontal position
         int Y,          // vertical position
         int cx,         // width
         int cy,         // height
         uint uFlags);       // window positioning flags

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

    static void ShowInactiveTopmost(Form frm)
    {
        ShowWindow(frm.Handle, SW_SHOWNOACTIVATE);
        SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,frm.Left, frm.Top, frm.Width, frm.Height,SWP_NOACTIVATE);
        frm.TopMost = false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...