[英]C#: Code works in one class but not in another
解決方案是簡單地使列表靜態。
我在A類中有代碼。在AI類中,有一個按鈕,該按鈕運行代碼以將對象添加到B類中的列表。
然后,在AI類中,有另一個按鈕可以打開不同的窗體,即C類。在C類中,我有一個按鈕,其運行的代碼與A類中的按鈕運行的代碼完全相同,但是當我單擊該對象時,該對象才添加到列表中A類中的按鈕,C類中的按鈕似乎沒有任何作用
A類還包含一個ListBox,它顯示B類中列表的內容,盡管我認為這不會影響問題。
A類:
classB manager = new classB();
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
private void btnOpenFormC_Click(object sender, EventArgs e)
{
classC newForm= new classC();
newForm.Show();
}
B類:
public List<Customer> CustomerList = new List<Customer>();
public void AddToList(Contact inData)
{
Customer cm = new Customer();
cm.Contact = inData;
cm.Id = GetId();
CustomerList.Add(cm);
}
C級:
classB manager = new classB();
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
所以我的問題是:如何做到這一點,以便可以將對象從A類和C類添加到列表中?
這可以通過多種方式解決
第一種方式 -Singleton
A級
var manager = ClassB.Instance;
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
B級
public class ClassB {
private static ClassB _Instance;
public static ClassB Instance {
get {
if(_Instance==null) _Instance = new ClassB();
return _Instance;
}
}
public List<Customer> CustomerList = new List<Customer>();
public void AddToList(Contact inData)
{
Customer cm = new Customer();
cm.Contact = inData;
cm.Id = GetId();
CustomerList.Add(cm);
}
}
C級
var manager = ClassB.Instance;
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
第二種方式 -靜態客戶列表
A級
var manager = new ClassB();
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
B級
public class ClassB {
public static List<Customer> CustomerList = new List<Customer>();
public void AddToList(Contact inData)
{
Customer cm = new Customer();
cm.Contact = inData;
cm.Id = GetId();
CustomerList.Add(cm);
}
}
C級
var manager = new ClassB();
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
我個人更喜歡第一種方法,因為新實例可能會消耗額外的內存分配。 希望這可以幫到你。
首先,我假設ClassA
和ClassC
是表格嗎?
在按鈕單擊處理程序中,打開ClassC
表單,只需將manager
成員放入ClassC
的構造函數中:
A類:
public class ClassA : Form
{
private classB manager = new classB();
...
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
private void btnOpenFormC_Click(object sender, EventArgs e)
{
ClassC newForm= new ClassC(manager);
newForm.Show();
}
}
ClassC:
public class ClassC : Form
{
private ClassB manager;
public ClassC(ClassB manager)
{
this.manager = manager;
...
}
...
private void btnAddItem_Click(object sender, EventArgs e)
{
Contact cnt = new Contact();
manager.AddToList(cnt);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.