c# WinForm弹出窗体时不获取焦点方法

WinForm开发的软件有时候需要在屏幕右下角弹窗进行一些提示,通常使用new MyForm().Show()即可实现此需求。

但是当MyForm显示出来时,会抢走原本窗体上的光标,导致原本在软件上比如打字或者其他操作被中断,非常不人性化,影响用户体验。

那么如何解决这个问题呢?

在窗体中复制如下代码粘贴即可:

cs 复制代码
protected override bool ShowWithoutActivation 
{ 
    get 
    { 
        return true; 
    } 
}

如果弹窗需要置顶,那么再额外添加如下代码即可:

cs 复制代码
protected override CreateParams CreateParams
{
    get
    {
        int WS_EX_TOPMOST = 0x00000008;
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= WS_EX_TOPMOST;
        return cp;
    }
}

需要注意的是,不能再给Form的TopMost属性设置成True

参考1:https://stackoverflow.com/questions/156046/show-a-form-without-stealing-focus

参考2:https://stackoverflow.com/questions/686132/opening-a-form-in-c-sharp-without-focus