2010-10-11 52 views

回答

3

只有一個窗口可以被激活。否則你會問'擁有'的窗戶。使用顯示(所有者)重載。它確保當用戶激活主(所有者)窗口時,所有其他表單也移動到前臺。當主窗口最小化時,可以最小化。

0

我會使用表單的一個通用列表(類的靜態成員)(List<Form>),並將設置屬性始終相同。例如在最小化事件等等...

1

我建議以下解決方案,我希望它是有用的:

第一:定義爲哥哥形式的接口:

public interface IFormBrothers 
{ 
    List<IFormBrothers> Brothers { get; set; } 
} 

然後實現該接口爲所有你希望他們的形式就像是兄弟如下:

public partial class FormB : Form, IFormBrothers 
{ 
    public List<IFormBrothers> Brothers { get; set; } 
} 

public partial class FormA : Form, IFormBrothers 
{ 
    public List<IFormBrothers> Brothers { get; set; } 
} 

然後添加以下擴展名:

public static class BrothersExntension 
    { 
     public static void SetAsBrother(this IFormBrothers form, IFormBrothers brother) 
     { 
      if (form.Brothers == null) 
       form.Brothers = new List<IFormBrothers>(); 

      if (form.Brothers.Contains(brother)) 
       return; 

      form.Brothers.Add(brother); 
      brother.SetAsBrother(form); 

      (form as Form).SizeChanged += (s, e) => 
       { 
        foreach (var item in form.Brothers) 
         (item as Form).Width = (s as Form).Width; 
       }; 
     } 
    } 

注:SizeChanged將只是一個例子,你可以重複對所有的共享行爲,如果你能

最後:不要忘記的形式加入到他的兄弟一次:

var f1 = new FormA(); 
var f2 = new FormB(); 
f1.SetAsBrother(f2); 

f1.Show(); 
f2.Show(); 

注意:將f1添加到f2已經足夠了,因爲f2會在內部添加f1。

祝你好運。