在静态类System.Windows.Forms中使用扩展

时间:2018-07-13 16:17:32

标签: c# winforms extension-methods

我对C#还是陌生的,所以请允许我,我正在尝试向Forms类添加方法,以便在有意义的情况下可以显示和隐藏其他表单中的其他表单。在我的扩展程序中,我有:

namespace ExtensionMethods
{
    public static partial class FormExtentsion : Form
    {
        public static void HideForm(this Form frm)
        {
            frm.Hide();
        }

        public static void UnhideForm(this Form frm)
        {
            frm.Show();
        }
    }
}

在我的项目中,我有:

private void bnTrBack_Click(objects sender, EventArgs e)
{
    Main.UnhideForm();
    this.Close();
}

Main是我的主要形式。有没有一种方法可以打开/关闭另一个表单?任何帮助深表感谢!

1 个答案:

答案 0 :(得分:1)

正如@CEvenhuis在问题注释中指出的那样,您需要一个主表单的实例。

(而且,您根本不需要扩展方法。从不需要-它们只允许调用代码具有不同的外观。但是,在这种情况下,在您显示的代码中,您只是给宠物起了个名字到已知的现有方法。)

无论如何,在“子”表单中,您可能会有一个字段引用主表单的实例。

Form _parent;

并像使用它

private void bnTrBack_Click(objects sender, EventArgs e)
{
    _parent.Show();
    Close();
}

或者,假设孩子只是主要形式的孩子,

Main _main;

private void bnTrBack_Click(objects sender, EventArgs e)
{
    _main.Show();
    Close();
}

问题是如何设置字段。

它可以在构造函数中设置:

ReadOnly Main _main;

并从以下位置更改设计者生成的代码:

    public Child()
    {
        InitializeComponent();
    }

    public Child(Main main)
    {
        InitializeComponent();
        _main = main;
    }

退后一步,而不是隐藏主表单,相反,可以- -将子表单显示为modal dialog,并在关闭后收到简单结果:

var result = new Child().ShowDialog(); 

通常,关于选项,有两点需要评估:

  1. 用户体验:控件是否以用户能够理解的方式以及允许他们遵循所需工作流程的方式呈现给用户?
  2. 类之间的耦合:哪些类取决于哪些类以及以何种方式?有没有传递数据和控制的好计划?