如何从静态类更新表单?

时间:2016-11-17 07:39:09

标签: c# forms winforms

这可能是重复的,但我无法找到我需要的确切内容。

这是我的问题:

我有一个主要表单,我从中创建了一个带有列表vew的子表单来做一些事情。

该子表格代码:

public partial class AccessGroupForm : Form
{
    public AccessGroupForm()
    {
        InitializeComponent();
    }
    public void Fillitems(PackageGroup[] pack)
    {
        foreach (var assignment in pack) //filling the listview
        {   
            list_view.Items.Add(assignment.Name).SubItems.Add(assignment.Id.ToString());
        }
    }

和一个用于加载此表单的静态类:

public static class AGView
{
    public static void Load(PackageGroup[] pack)
    {
        access_group = AG;
        AccessGroupForm AGform = new AccessGroupForm();
        AGform.StartPosition = FormStartPosition.CenterParent;
        AGform.Fillitems(pack);
        AGform.ShowDialog();
    }
}

现在我想要的是能够在按下按钮时通过此静态类更新表单,例如:

private void UpdateMeToolStripMenuItem_Click(object sender, EventArgs e)
{
    AGView.UpdateMe()
}

如何访问使用AGView.Load(pack)方法创建的完全相同的表单? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

使用静态类来控制表单是非常糟糕的做法。因为只有一个"实例"表单可以有多个实例的静态类。

但如果你真的想要这样做,只需将静态类更改为:

public static class AGView
{      
    private static AccessGroupForm AGform = new AccessGroupForm(); 
    public static void Load(PackageGroup[] pack)
    {
        access_group = AG;
        AGform.StartPosition = FormStartPosition.CenterParent;
        AGform.Fillitems(pack);
        AGform.ShowDialog();
    }
}

现在您只需使用AGForm即可访问该表单。

但请记住,这是非常糟糕的做法。

答案 1 :(得分:0)

只需创建表单的静态实例。

public static class AGView
{    
    private static AccessGroupForm AGform;  
    public static void Load(PackageGroup[] pack)
    {
    access_group = AG;
    AGform = new AccessGroupForm();
    AGform.StartPosition = FormStartPosition.CenterParent;
    AGform.Fillitems(pack);
    AGform.ShowDialog();

    }
    public static void UpdateMe()
    {
        if(AGform != null)
        {  
            AGform.Update();
        }
    }
}

你可以这样打电话:

private void UpdateMeToolStripMenuItem_Click(object sender, EventArgs e)
{
  AGView.UpdateMe()
}

当您不再需要时,请务必处理您的表格!否则,只要程序正在运行,它就会被分配,因为它是静态的。

也许使用singleton类而不是静态类?