防止形式窃取焦点

时间:2009-03-10 14:17:20

标签: vb.net winforms

当我运行我的VB.NET Winforms应用程序时,我不希望它从其他打开的应用程序中窃取焦点。仅供参考,我的应用程序是从命令行启动的,但这不应该有所作为。我见过问题577076,但这似乎不起作用。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:4)

以下是我的工作:

我将以下代码添加到我的Form1.vb文件中:

Protected Overloads Overrides ReadOnly Property ShowWithoutActivation() As Boolean  
    Get  
        Return True  
    End Get  
End Property

但仍然没有成功。

然后,我取消选中项目属性的“应用程序”选项卡上的“启用应用程序框架”复选框。

成功!!!

答案 1 :(得分:1)

实际上,ShowWithoutActivation可以正常工作,而无需禁用框架。我认为我的问题不起作用,直到我意识到隐藏主要表单在弹出窗体出现时引起焦点。因此,重点关注我正在使用的其他应用程序。如果遇到类似情况,请使用不透明度而不是隐藏。只需设置为0即可隐藏表单,将100设置为隐藏表单。这允许函数按照描述工作。

答案 2 :(得分:0)

在您链接的示例中,某些常量声明在方法范围之外。这是另一个适合您的版本:

protected CreateParams CreateParams {
  get {
    CreateParams baseParams = base.CreateParams;
    const int WS_EX_NOACTIVATE = 0x08000000;   
    const int WS_EX_TOOLWINDOW = 0x00000080;    
    baseParams.ExStyle |= (int) (WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW); 
    return baseParams;
  }
}
...

你必须把它翻译成VB.Net但是......