这可能是重复的,但我无法找到我需要的确切内容。
这是我的问题:
我有一个主要表单,我从中创建了一个带有列表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 :(得分: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类而不是静态类?