简体   繁体   中英

Show a Form without stealing focus stopped working after a while

I created my own on screen keyboard with special features. I'm using override methods ShowWithoutActivation and CreateParams for preventing my Form getting focus (according to this stackoverflow question ).

    protected override bool ShowWithoutActivation
    {
        get { return true; }
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams param = base.CreateParams;
            param.ExStyle |= 0x08000000;
            return param;
        }
    }

But after a few Hide() and Show() my Form is again focusable. To fix it I need to restart application, but it is of course poor solution. Is it possible to do without restart? Showing Form after being hidden without giving it focus not help. My application can just be focused again.

I'm noticed that in most cases it happens randomly, but in one of them always: if I show my application after right mouse click on NotifyIcon in tray and choose item from ContextMenuStrip. OnClick I simply call show function.

Do you need to click the window? When not, try this one:

   protected override void WndProc(ref Message message)
   {
       switch (message.Msg)
       {
           case 0x84: // WM_NCHITTEST
               message.Result = (IntPtr)(-1); // HTTRANSPARENT;
               return;
       }

       base.WndProc(ref message);
       return;
   }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM