C# WinForm中Controller类的账户列表无法在ListBox显示怎么解决
问题原因及修复方案
1. 首要问题:未提前初始化账户列表
你目前只在窗体初始化阶段调用了DisplayAccounts()方法加载列表,但没有任何代码显示你在加载列表前调用了Controller类的MakeAccounts()方法,这会导致control.myA列表是空集合,遍历的时候不会添加任何项到列表框,自然没有内容显示。
你需要调整执行顺序:先调用control.MakeAccounts()完成账户初始化,再执行DisplayAccounts()方法加载列表。
2. 次要问题:列表框无法正确显示账户信息
就算你完成了列表初始化,当前代码也只会显示类似YourNamespace.Account+Everyday的类名,而不是你期望的账户类型信息,原因有两个:
- 你的
Account类没有重写ToString()方法,列表框默认调用该方法展示对象内容 - 你存储账户类型的
typeName是protected访问级别的,外部控件无法直接读取该字段
你可以选择以下任意一种方案修复:
方案A:重写Account类的ToString()方法
在Account类中添加如下代码:
public override string ToString() { // 可自定义显示格式,比如加上账户ID和余额 return $"[{accountID}] {typeName} - 余额:{balance:C}"; }
方案B:公开属性并设置列表框的显示成员
首先给Account类添加公开的属性暴露需要显示的字段:
public string TypeName => typeName; public int AccountID => accountID;
然后在窗体的InitializeComponent逻辑中,给列表框设置DisplayMember属性:
listBoxManageAccounts.DisplayMember = "TypeName";
3. 排查校验点
如果完成上述修改后还是没有内容,可以加断点检查两个点:
- 执行
DisplayAccounts()时,control.myA.Count的值是否为3 - 遍历
control.myA时,是否进入了循环体执行Add操作
内容的提问来源于stack exchange,提问作者DJ Dog
相关产品推荐
相关产品推荐

