You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows窗体程序报错:ListBox的Add方法无接受2个参数的重载

解决WinForms ListBox添加项时"No overload for method 'Add' takes 2 arguments"错误

嘿,我来帮你搞定这个问题!你遇到的这个报错,核心原因是WinForms的ListBox.Items.Add()方法本身只接受单个参数——之前你直接传入字符串(比如文件名)没问题,是因为字符串属于object类型,符合方法的参数要求,但现在想同时传零件编号和文件名两个值,就不符合它的方法签名了。

要实现“显示文件名,同时关联存储零件编号”的需求,有两种常用的方案:

方案一:使用KeyValuePair(快速实现)

这种方法适合只需要两个关联值的场景,不需要额外定义类:

  1. 先在窗体初始化(比如Form_Load事件)里设置ListBox的显示和值成员:
// 告诉ListBox:显示Value属性(文件名),把Key属性(零件编号)作为关联值
listBox1.DisplayMember = "Value";
listBox1.ValueMember = "Key";
  1. 添加项的时候,创建KeyValuePair对象传入:
// 假设你已经从文件名中提取出了partNumber(零件编号)和fileName(文件名)
var item = new KeyValuePair<string, string>(partNumber, fileName);
listBox1.Items.Add(item);
  1. 后续获取选中项的零件编号:
if (listBox1.SelectedItem != null)
{
    var selectedPair = (KeyValuePair<string, string>)listBox1.SelectedItem;
    string targetPartNumber = selectedPair.Key;
    // 这里可以用targetPartNumber做后续操作
}

方案二:自定义类(更灵活,适合扩展)

如果之后可能需要添加更多属性(比如文件路径、修改时间),自定义类会更方便:

  1. 先定义一个存储文件和零件信息的类:
public class FilePartInfo
{
    // 零件编号
    public string PartNumber { get; set; }
    // 文件名
    public string FileName { get; set; }

    // 重写ToString(),如果没设置DisplayMember,ListBox会显示这个方法的返回值
    public override string ToString()
    {
        return FileName;
    }
}
  1. 设置ListBox的成员(可选,如果不设置,会用ToString()的结果显示):
listBox1.DisplayMember = "FileName";
listBox1.ValueMember = "PartNumber";
  1. 添加项:
listBox1.Items.Add(new FilePartInfo 
{ 
    PartNumber = partNumber, 
    FileName = fileName 
});
  1. 获取选中项的零件编号:
if (listBox1.SelectedItem != null)
{
    var selectedInfo = (FilePartInfo)listBox1.SelectedItem;
    string targetPartNumber = selectedInfo.PartNumber;
}

两种方案都能解决你的报错,并且实现“显示文本+关联值”的需求,你可以根据自己的场景选择~

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:58:22