none
c# winform 设置的弹出窗口如何不抢当前的焦点啊? RRS feed

  • 问题

  • 主窗体里有这么一段

    FormTips ft = new FormTips();
    ft.show();

    然后执行的时候,我想要ft这个窗体不获取焦点,有点类似qq的右下角弹出的新闻窗体


    loveym
    2010年8月1日 3:50

答案

  • 你好!

    我们需要借助ShowWindow这个API来实现:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace WindowsApplication1
    {

        public partial class Form1 : Form
        {
            [DllImport("user32.dll")]
            static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 form2 = new Form2();
                ShowWindow(form2.Handle, 4);//显示一个SW_SHOWNOACTIVATE的窗体
               
            }
        }
    }


    周雪峰
    2010年8月1日 8:52
    版主
  • 那你就把load里面的事件放在构造函数里面来实现咯。


    can you help me?
    2010年8月2日 3:08

全部回复

  •             Form2 form2 = new Form2();
                form2.Show();
                form2.FormBorderStyle = FormBorderStyle.None;
                form2.ShowInTaskbar = false;
                this.BringToFront();

    试试

    2010年8月1日 4:01
  • 你好,我这个弹出窗口是设置隔一段时间刷新出来一次。

    比方我在操作别的任务时,比如我在当前程序外,比方浏览网页或输入文字时,弹出窗口会抢焦点~~


    loveym
    2010年8月1日 7:35
  • 照这样的话, 你做的就是个病毒了...
    2010年8月1日 8:29
  • 你好!

    我们需要借助ShowWindow这个API来实现:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace WindowsApplication1
    {

        public partial class Form1 : Form
        {
            [DllImport("user32.dll")]
            static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 form2 = new Form2();
                ShowWindow(form2.Handle, 4);//显示一个SW_SHOWNOACTIVATE的窗体
               
            }
        }
    }


    周雪峰
    2010年8月1日 8:52
    版主
  • 你好,我照你的方法做了,可是我测试的时候
    form2里原来的 Load 事件都不执行了,我load事件里设置了断点,form2显示的时候,根本没走过这一步~~~


    loveym
    2010年8月2日 1:23
  • 那你就把load里面的事件放在构造函数里面来实现咯。


    can you help me?
    2010年8月2日 3:08