为什么只有第一个显示的窗口可以聚焦

时间:2009-07-02 15:16:57

标签: winforms focus

想象一下下面的代码。只有第一个窗口出现在顶部,所有后续窗口都不会,也不能出于某种原因进行编程聚焦(它们出现在后台)。知道如何解决这个问题吗?顺便说一句,静态方法/属性是不允许的,也不是任何全局属性。

[STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Thread t1 = new Thread(CreateForm);
        t1.SetApartmentState(ApartmentState.STA);
        t1.Start();
        t1.Join();

        t1 = new Thread(CreateForm);
        t1.SetApartmentState(ApartmentState.STA);
        t1.Start();
        t1.Join();
    }

    private static void CreateForm()
    {
        using (Form f = new Form())
        {
            System.Windows.Forms.Timer t = new System.Windows.Forms.Timer
            {
                Enabled = true,
                Interval = 2000
            };
            t.Tick += (s, e) => { f.Close(); t.Enabled = false; };

            f.TopMost = true;
            Application.Run(f);
        }
    }

1 个答案:

答案 0 :(得分:0)

Hans Passant solved the problem:只使用SetForegroundWindow()(P / Invoke)。谢谢,我应该这样说: - )