我有一个静态类(Argus
),其中一个名为myArgus
的属性是一个List,另一个名为EditProduct
。在EditProduct
的构造函数中,我有这一行:
// Make a copy of the product so we can easily reference it in this class
product = Argus.myArgus[Argus.branchIndex]._branchCategories[catIndex]._categoryProducts[prodIndex];
我这样做,所以我可以在我的代码中使用product._productName;
而不是:
Argus.myArgus[Argus.branchIndex]._branchCategories[catIndex]._categoryProducts[prodIndex]._productName;
在EditProduct
表单的顶部,我正在定义此属性:
Product product = new Product();
然后,在EditProduct
课程的后面,我正在这样做:
txtName.Text = product._productName;
txtDetails.Text = product._productDetails;
txtPrice.Text = product._productPrice.ToString();
txtStock.Text = product._productStockLevel.ToString();
pbProduct.ImageLocation = product._productPicLoc;
但是,表单上没有任何字段实际填充。使用断点,我发现product
为空(它包含空字符串,0表示整数/双精度值)。我已经确认我在分配时指向了有效的产品。我没有错误,也没有任何关于为什么product
为空的线索。 :|
如果它有帮助,这是完整的课程:
可能出现什么问题?感谢。
答案 0 :(得分:1)
问题是,在为populateFields
指定值之前,您正在呼叫product
将构造函数更改为:
public EditProduct(int catIndex, int prodIndex)
{
InitializeComponent();
this.catIndex = catIndex;
this.prodIndex = prodIndex;
// Create file handler
fileHandler = new FileHandler(Argus.dataFileLoc);
// Make a copy of the product so we can easily reference it in this class
product = Argus.myArgus[Argus.branchIndex]._branchCategories[catIndex]
._categoryProducts[prodIndex];
// This must be called after the previous line!
populateFields();
}
答案 1 :(得分:0)
来自你的构造函数:
populateFields();
...
// Make a copy of the product so we can easily reference it in this class
product = Argus.myArgus[Argus.branchIndex]._branchCategories[catIndex]
._categoryProducts[prodIndex];
因此,您在product
中使用之后设置了populateFields
变量。这不会起作用......
我实际上建议你甚至不在这里使用实例变量,除非你真的需要。我会将构造函数更改为...
// Ideally you should simplify this...
Product product = Argus.myArgus[Argus.branchIndex]._branchCategories[catIndex]
._categoryProducts[prodIndex];
PopulateFields(product);
并更改您的方法以获取参数:
private void PopulateFields(Product product)
{
...
}
据我所知,你没有在其他任何地方使用product
,除了构造函数之外你没有调用populateFields
- 所以你真的不需要它成为其中的一部分对象的状态。
答案 2 :(得分:0)
在将值放入产品之前,您调用 populateFields 。
这是错误的:
populateFields();
// Create file handler
fileHandler = new FileHandler(Argus.dataFileLoc);
// Make a copy of the product so we can easily reference it in this class
product = Argus.myArgus[Argus.branchIndex]._branchCategories[catIndex]._categoryProducts[prodIndex];
这将有效:
// Make a copy of the product so we can easily reference it in this class
product = Argus.myArgus[Argus.branchIndex]._branchCategories[catIndex]._categoryProducts[prodIndex];
populateFields();
// Create file handler
fileHandler = new FileHandler(Argus.dataFileLoc);