C# Winform:
主窗体f1里一个Button,它的click事件里,要让form2显示出来:
Form2 f2=new Form2();
f2.Show();
------------------------------
当这个f2显示出来的时候,默认是f2夺取了主窗体f1的焦点,即f2出来就默认是Actived,
我现在要做的效果是:任何情况下,让f2 Show出来的时候,f1都不会失去焦点。如果需要Win32 API,请提供些代码或参考,谢谢。

解决方案 »

  1.   

    请参考 http://blog.csdn.net/jinjazz/archive/2008/07/10/2635221.aspx 这里
      

  2.   

    Form2 f2=new Form2(); 
    f2.Show(); 后边加一句
    this.Activate();
      

  3.   

    用MDI窗体不好么?父窗体和子窗体好控制的多。
      

  4.   

    Form2 f2=new Form2(); 
    f2.Show(); 
    this.Focus();
      

  5.   

    你说的是模态转换吧。用actived事件吧
      

  6.   

    在Show()之后调用
    this.Activate();
    即可
      

  7.   

    Form2 f2=new Form2(); 
    f2.Show(); 
    this.Activate(); 
      

  8.   

     Form2 f = new Form2();
                f.Show();
                this.Activate();
      

  9.   

    为什么还有FORM1的焦点?是想生成多个form2么
      

  10.   

    顶“一个失败的人”,用ACTIVED
      

  11.   

      public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form2 form2 = new Form2();
                form2.Show();
                Activate();
            }
        }
      

  12.   

    楼主是在做类似QQ新闻的提示框吧;9楼的方法ok;
      

  13.   


    //主窗体f1里一个Button,它的click事件里,要让form2显示出来: 
    Form2 f2=new Form2(); 
    f2.Show();
    //弹出f2 后为自己获得焦点
    this.Focus(); 
      

  14.   


    //主窗体f1里一个Button,它的click事件里,要让form2显示出来: 
    Form2 f2=new Form2(); 
    f2.Show();
    //弹出f2 后为自己获得焦点
    this.Focus();
    //或者
    this.Activate(); 两种方式都可以
      

  15.   

    谢谢各位,是的 我是想做类似QQ的那个效果:
    当你鼠标移到某QQ好友头像处的时候,左边出来的那个显示该好友基本信息的那个窗体框,
    用上面的方法,即f2 Show出来后,立即让Activate(); 
    这样的话在f2 出来的那一杀那,明显可以看到f1的Active变化的过程了, 而QQ那个一点看不出来啊,请问还有好的办法不?
      再次谢谢。
      

  16.   

    那你让Form2加载出来的时候把焦点设置到From1上就可以了啊
    传个窗体对象应该可以试试看
      

  17.   

    用先让f2 Show出来 然后将Actived交还给f1的做法 f1上会有明显的变化的。。
      

  18.   

    的确没法解决……因为WINFORM一定会FOCUS,那么你任何转移FOCUS的操作必然会引起你不希望的窗体重绘……
      

  19.   


    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    Form2 f = new Form2();
    ShowWindow(f.Handle, 4);
      

  20.   

    http://topic.csdn.net/u/20080930/14/362123ac-af78-4c7d-b253-205d6b35679a.html
      

  21.   

    不知情况是否一样,我遇到这个问题时的解决代码是:this.WindowState = FormWindowState.Maximized!