启用/禁用表单激活

时间:2014-02-19 22:51:16

标签: c# forms

我想禁用Form被激活。要做到这一点,我用这个:

private const int WS_EX_NOACTIVATE = 0x08000000;
protected override CreateParams CreateParams
{
   get
      {
          CreateParams createParams = base.CreateParams;
          createParams.ExStyle = WS_EX_NOACTIVATE;
          return createParams;
       }
}

这对我的程序的主要活动很好,因为我仍然可以点击按钮,Form将不会激活。无论前景中的任何节目都在那里。

问题出在我的程序开头我需要用键盘输入一些文本,因此Form必须是活动的,否则文本将转到前台的程序。

我知道在哪里以及何时启用/禁用Form激活功能,我只是不知道如何。

编辑:当它无法再激活时,我仍然希望表单的按钮可以点击。这里的代码就是这样的。当我想输入一些文字时,真正的问题就在于。

2 个答案:

答案 0 :(得分:2)

Windows不太尊重NoActivate标志。你可能会更好地拒绝点击消息。

private const int WM_MOUSEACTIVATE = 0x0021, MA_NOACTIVATE = 0x0003;

protected override void WndProc(ref Message m) {
  if (m.Msg == WM_MOUSEACTIVATE) {
     m.Result = (IntPtr)MA_NOACTIVATE;
     return;
  }
  base.WndProc(ref m);
}

将点击进入下一个窗口。如果您想完全阻止点击,请使用MA_NOACTIVATEANDEAT = 0x0004代替MA_NOACTIVATE

如果您不需要这种强有力的保护,可以覆盖另一个标志:

protected override bool ShowWithoutActivation
{
      get { return true; }
}

答案 1 :(得分:0)

在互联网上搜索更多后,我发现了一个简单的单行解决方案:

Activate();

不知道这个存在。使用问题中的代码加上Form_Load上的代码我可以让程序在开始时保持活动状态并保持这种状态直到我改为另一个程序。之后,我的程序将永远不会再次激活。 除非我按下按钮或再次调用Activate()的东西。