2011-12-28 76 views
0

我试图在窗口2:如何强制重点儿童形态?

//... 

    var form3 = new Form3(this); 

         if (System.Windows.Forms.Application.OpenForms[form3.Name] == null) 
         { 
          form3.Show(); 
         } 
         else 
         { 
          System.Windows.Forms.Application.OpenForms[form3.Name].Focus(); 
         } 

,然后在form3:

public partial class Form3 : Form 
    { 
     public Form2 _emailForm; 

     public Form3 (Form2 emailForm) 
     { 
      _emailForm = emailForm; 
      InitializeComponent(); 
     } 

    public void foo() 
     { 
      _emailForm.ForceFocus(); 
      this.Close(); 
     } 
} 

,但形式不集中。有人可以指出我的错误?提前致谢。

+1

你到底想达到什么目的?打开一个表单并关注它? – Matthias 2011-12-28 00:40:32

+0

从form2中打开form3,在form3中执行某些操作并将焦点放在form2上。 – user834697 2011-12-28 00:45:22

回答

0

您可以简化它是这样的:

public Form1(Form parent) 
{ 
    InitializeComponent(); 
    _parent = parent; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (_parent != null) 
     _parent.Focus(); 
} 

我希望这回答了你的问题。否则,请留下评论。

EDIT

Show()都和BringToFront()使用SafeNativeMethods.ShowWindow(...)内部。所以你不会注意到任何区别。不过,我认为在Form对象上使用Show()Activate(),在Control对象上使用BringToFront()对象更常见,它们是其他对象的一部分。

+0

还有'_parent.BringToFront();'或者其他的东西。我不在我的电脑,所以没有VS在这里。尝试intellisense找到它。一旦我回家,我会检查一下。 – 2011-12-28 00:57:24

+0

确认窗体有一个BringToFront方法。 – 2011-12-28 03:19:02

0

如果你绝对希望用户能够利用Form1中再次使用.ShowDialog(),而不是.Show之前采取行动,窗体2()