TopMost = true的WinForms对话框

时间:2009-11-13 08:01:20

标签: winforms dialog

我在WinForms中实现了一个对话框,在屏幕右下角显示为通知对话框。问题是无论什么时候显示它都需要关注,这只有在TopMost = true时才会发生。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

您需要从Form继承并覆盖几个属性:

[Flags]
enum WS_EX
{
    TOPMOST = 0x00000008,
}

class TopMostForm : Form
{
    protected override CreateParams CreateParams
    {
        get
        {
            var baseParams = base.CreateParams;
            baseParams.ExStyle |= (int)WS_EX.TOPMOST;
            return baseParams;
        }
    }

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

然后只需在此表单上显示Show(),它将显示为最顶层且无效。

答案 1 :(得分:1)

使用Show而不是ShowDialog显示对话框。 ShowDialog将是最顶级的,用户必须在做其他事情之前点击它(模态) Show会显示正常。

答案 2 :(得分:0)

这个策略怎么样:

  1. 在启动时显示,然后立即显示:
  2. 使用ShowWindow(SW_HIDE)
  3. 隐藏它
  4. 永远不要关闭表单,只是让它不可见
  5. 使用ShowWindow(SW_SHOWNOACTIVATE)
  6. 显示它