2016-11-17 57 views
0

这可能是重复的,但我无法准确找到我需要的东西。如何从静态类更新表单?

这里是我的问题:

我有一个主要形式,从中我建立一些子形式与列表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)方法创建完全一样的形式? 在此先感谢!

+0

重点搜索术语:“C#教程”。静态类仍然可以有静态成员。也就是说,定义表单之间的接口并提供它可能会更清晰 - 而不是依赖于外部版主/静态类。 – user2864740

+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访问形式。

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

+0

谢谢!我知道这有点不好,目前它只是一个快速的工作周。当我有时间去重做它。 – Amarula

+0

@Amarula如果你认为我的回答对你有帮助,请考虑通过点击该复选标记来接受它! – Sweeper

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类而不是静态类吗?

+0

非常感谢!去尝试单身。 – Amarula