想点击一个主窗口里的tree node 后, form.Show弹出一个新窗口。(.ShowDialog不能切换,所以不合要求)可是新窗口出现后,由于其他代码的影响,tree node又获得了焦点,新窗口就隐藏在主窗口后面了。
我想到了一个方法,就是在新窗口中设TopMost为true,再加一个timer,过0.5秒后将新窗口的TopMost设为false.这样新窗口一开始的时候在最前面,而且还可以和主窗口切换.
但我的头说,每个新窗口都加个timer很不好,要我想其他方法.请教,我在主窗口中,写什么代码可以代替新窗口中timer的作用?

解决方案 »

  1.   

    在引起tree node焦点的新窗口代码后面, 将新窗口再次置前.
      

  2.   

    我写过一个Treeview,主窗口里的右键tree node 后弹出Node的属性,没问题,没有你说的新窗口就隐藏在主窗口后面的情况。请你说详细一点。“ShowDialog不能切换”是什么意思。
      

  3.   

    Form2 f ;定义为类成员(即在所有方法的外面)可是新窗口出现后,由于其他代码的影响,tree node又获得了焦点,新窗口就隐藏在主窗口后面了。
    然后在这时你再用下面语句设置f为顶窗口
    f.TopMost=true;
      

  4.   

    一般情況你點了Tree Node 彈出新窗體 默認新窗體會在最前面的
    但是新窗體載入內存(也就是load事件)須要一定的時間,新窗體還沒有打開,這時鼠標又
    按到了原有的窗體,所以當新窗體彈出時,就失去焦點,在後面了。這個是操作上的問題,如果要解決也不是沒有辦法不考慮其它方面 ,單純說什麼可以替代timer ? 可以用線程來做。
      

  5.   

    楼上各位 , 我现在程序执行顺序是:主窗口->新窗口->主窗口,所以主窗口上的tree又获得了焦点,新窗口跑到主窗口后面去了.
    Thread.sleep(500)的话,只不过停留0.5秒,完了还是要执行主窗口的代码.
      

  6.   

    LZ是在没有窗体的代码中想使用timer,是吧?直接new 1个timer
    再自己挂个事件进去不过最好保存好你的TIMER实例,到时候好关闭掉它.
      

  7.   

    想点击一个主窗口里的tree node 后, form.Show弹出一个新窗口。(.ShowDialog不能切换,所以不合要求)可是新窗口出现后,由于其他代码的影响,tree node又获得了焦点,新窗口就隐藏在主窗口后面了。你在这段处理的代码最后再显示新窗口。就不会出现你说的那个问题。或者用一个异步方法显示新窗体。或者将属性窗口做成主窗口的子窗体。添加如下代码: form.MDIParent = this; form.Show():
      

  8.   

    试试这两个事件:GotFocus;LostFocus
    this.GotFocus += new EventHandler(ImportHelper_FocusChanged);
    this.LostFocus+= new EventHandler(ImportHelper_FocusChanged);void ImportHelper_FocusChanged(object sender, EventArgs e)
    {
      this.TopMost = !this.Focused;
    }