将表单“组合”在一起的最简单方法是什么?

时间:2010-10-11 18:44:22

标签: c# winforms

如下:当一个表格被激活时,它们全部被激活,当一个表格被最小化时,它们都被最小化,等等。

3 个答案:

答案 0 :(得分:3)

只能激活一个窗口。你在另外询问'拥有'窗户。使用Show(所有者)重载。它确保当用户激活主(所有者)窗口时,所有其他窗体也移动到前台。当主窗口最小化时,最小化。

答案 1 :(得分: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。

祝你好运。

答案 2 :(得分:0)

我会使用表格的通用列表(类的静态成员)(List<Form>)并将属性设置为始终相同。例如关于最小化事件等等......