如何使用另一个类中的方法添加到ListBox
本文关键字:方法 添加 ListBox 何使用 另一个 | 更新日期: 2023-09-27 18:23:44
我觉得这里缺少了一些明显的东西。这是我的表格截图。
我有两个类,ShoppingBasket和OrderItem,然后是Form1类。我在OrderItem中有四个属性,我想在ShoppingBasket中使用它们。我想在文本框1中输入产品名称,在numericupdown1中输入数量,在文本框2中输入最新价格,然后我将单击添加按钮,该按钮将使用OrderItem类验证值,然后将它们放入ShoppingBasket类中的AddProduct方法中,该方法有望在表单中的列表框中添加一行。
表格1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void addButton_Click(object sender, EventArgs e)
{
decimal latestPrice;
ShoppingBasket addButtonShoppingBasket = new ShoppingBasket();
decimal.TryParse(textBox2.Text, out latestPrice);
OrderItem currentItemQuantity1 = new OrderItem(textBox1.Text, latestPrice, Convert.ToInt32(numericUpDown1.Value));
addButtonShoppingBasket.AddProduct(currentItemQuantity1.ProductName, currentItemQuantity1.LatestPrice, currentItemQuantity1.Quantity);
}
}
购物篮:
public class ShoppingBasket
{
public ShoppingBasket()
{
}
public void AddProduct(string productName, decimal latestProductValue, int quantity)
{
Form1 newform = new Form1();
string itemFormatString = "{0,-50}{1,0}{2,50}";
newform.listBox1.Items.Add(string.Format(itemFormatString, productName, Convert.ToString(quantity), Convert.ToString(latestProductValue)));
}
}
订单项目:
public class OrderItem
{
public OrderItem(string productName, decimal latestPrice, int quantity)
{
ProductName = productName;
LatestPrice = latestPrice;
Quantity = quantity;
TotalOrder = latestPrice * quantity;
}
public string ProductName { get; set; }
public decimal LatestPrice { get; set; }
public int Quantity { get; set; }
public decimal TotalOrder { get; set; }
}
您的问题是,无论何时添加产品,都要从ShoppingBasked
创建一个新表单:
public void AddProduct(string productName, decimal latestProductValue, int quantity)
{
Form1 newform = new Form1();
string itemFormatString = "{0,-50}{1,0}{2,50}";
newform.listBox1.Items.Add(string.Format(itemFormatString, productName, Convert.ToString(quantity), Convert.ToString(latestProductValue)));
}
newform
并不是实际调用AddProduct
的形式!即使您在任何地方都看不到此newform
(因为未调用newform.Show()
),列表项get也会添加到此"不可见"表单,而不是原始表单。
为了解决这个问题,我建议将您的表单作为参数传递给AddProduct
:
public void AddProduct(Form1 form, string productName, decimal latestProductValue, int quantity)
{
string itemFormatString = "{0,-50}{1,0}{2,50}";
form.listBox1.Items.Add(string.Format(itemFormatString, productName, Convert.ToString(quantity), Convert.ToString(latestProductValue)));
}
这样称呼它:
private void addButton_Click(object sender, EventArgs e)
{
// ...
// Your current code here
// ...
addButtonShoppingBasket.AddProduct(this,
currentItemQuantity1.ProductName,
currentItemQuantity1.LatestPrice,
currentItemQuantity1.Quantity);
}
还有一个继续的一般建议是改变你的设计。目前,ShoppingBasket
与Form1
高度耦合——这意味着,除了Form1
,您不能从任何其他来源向购物篮添加新商品!但是ShoppingBasket
不应该关心它接收的项目的来源。此外,在您创建新的ShoppingBasket
时,每次插入项目时。这意味着,每个ShoppingBasket
只能有一个项目。因此,为了进一步学习,我建议以下几点:
- 使
ShoppingBasket
成为Form1
的成员变量 - 添加项时,请将项添加到此成员变量中
- 不要将您的表单传递给
AddProduct
,而是让ShoppingBasket
提供有关它所包含项目的信息 - 在
AddProduct
之后立即呼叫listBox1.Items.Add
那么你的ShoppingBasket
并不关心你的产品是如何展示的,它只关心产品是如何在内部存储的。