到目前为止,我只能将2个表单链接在一起。
我需要将3个表单链接在一起的原因是因为我有InventoryForm
和MainForm
,它们可以打开或显示我的SupplierForm
(supplierform.show();
)。
< / p>
我需要在InventoryForm.dataGridView1
中进行一些处理后,才能刷新SupplierForm
上的数据。
问题是当我在SupplierForm
上设置参数来保存/获取InventoryForm
时,如下所示:
public SupplierForm(InventoryForm inventory)
{
InitializeComponent();
inventoryform = inventory;
}
并在InventoryForm
上使用如下方法:
//this is on `SupplierForm`
private void backbutton1_Click(object sender, EventArgs e)
{
//closes module and .Focus() back to inventory form
connection.Close();
inventoryform.RefreshGrid();
inventoryform.dataGridView1.Sort(inventoryform.dataGridView1.Columns["ItemID"], ListSortDirection.Ascending);
this.Close();
}
每当我尝试在{{1}中使用MainForm
来打开或显示(SupplierForm
supplierform.show();
时,SupplierForm
都会要求一个button1
的参数}}。
我什至尝试连接MainForm
和MainForm
,但是问题变得越来越大,所有链接到SupplierForm
的Forms都在请求mainform参数。
您碰巧知道解决方法吗?
答案 0 :(得分:0)
有一些解决方案,但是最简单的方法是创建一个接口:
public interface IRefreshable()
{
void RefreshGrid();
}
并以您的形式实现它:
public SupplierForm : IRefreshable
{
public void RefreshGrid()
{
// Your form-specific refresh code goes here
this.SupplierGrid.Refresh();
}
}
和
public MainForm : IRefreshable
{
public void RefreshGrid()
{
// Your other form-specific refresh code goes here
this.MainGrid.Refresh();
}
}
实现接口是对对象将拥有该方法的承诺,而无需了解对象的其他信息。现在,可以使用MainForm或InventoryForm参数来提供供应商表单。不在乎,因为它们都有自己的RefreshGrid版本。
public SupplierForm
{
private IRefreshable parentform;
public SupplierForm(IRefreshable parent)
{
InitializeComponent();
parentform = parent;
}
//this is on `SupplierForm`
private void backbutton1_Click(object sender, EventArgs e)
{
//closes module and .Focus() back to inventory form
connection.Close();
parentform.RefreshGrid();
this.Close();
}
}
答案 1 :(得分:0)
如果您知道每种形式只有一个实例,则可以使用静态帮助器类 例如:
public static class formHelper
{
static InventoryForm InvForm;
static SuplierForm SupForm;
static MainForm MnForm;
}
您可以使用formHelper.InventoryForm
在命名空间中的任何位置访问变量。但是在此之前,您需要设置变量以包含正确的形式:
public MainForm() //the constructor
{
formHelper.MnForm = this;
}
在每种形式的构造函数中执行此操作会更改课程名称。
在每种形式上调用的方法仍然需要在每种形式上创建,但是对引用进行隐藏很容易且可访问。希望对您有所帮助。
答案 2 :(得分:0)
您可以使用多个这样的构造函数:
public SupplierForm()
{
InitializeComponent();
}
public SupplierForm(InventoryForm inventory) :this()
{
InitializeComponent();
inventoryform = inventory;
}