在重新填充期间替换listBox项目

时间:2015-08-06 08:13:21

标签: c# listbox

我正在构建一个联系人管理器程序,我有一个按钮,当按下该按钮时,会更新名称列表框。不幸的是,我希望我的用户在关闭程序之前并不总是把名字放进去。我已经决定在输入名称之前将列表中的新联系人显示为随机数字,因此我的一些项目将是数字,一些将是名称。不过,我似乎无法让名字出现。我一直将名称存储在包含在唯一随机数文件夹中的文本文件中。我想要的是能够将所有文件夹名称加载到列表中,然后检查名称是否与项目相关联,如果是,请将该号码替换为相应的名称。以下代码是在我被难倒之前得到的。

private void button5_Click(object sender, EventArgs e)
{
    //populate the list of people
    listBox1.Items.Clear();
    string[] dirs = Directory.GetDirectories(@"C:\PersonalManager\");
    foreach (string dir in dirs)
    {
        //replace numbered items with names
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            String Text = Convert.ToString(listBox1.Items[i]);
            Text = Text.Replace(File.ReadAllText(@"C:\PersonalManager\"+listBox1.Items[i]+@"\first.txt")); //first.txt is the file containing the name
            listBox1.Items[i] = Text;
        }
        listBox1.Items.Add(Path.GetFileName(dir));
    }
}

我也非常确定某处存在重载错误,因为Visual Studio拒绝编译它。也许我应该以不同的方式解决这个问题?你们有什么建议的?我已经搜索了谷歌和Bing,但还没弄明白我做错了什么。对不起,如果我的代码很乱,这是我的第一次。

P.S。我是一个初学者,所以我不能不经常发表任何评论而无法围绕太多代码。

1 个答案:

答案 0 :(得分:0)

我很确定这一行破坏了您的代码:

Text = Text.Replace(File.ReadAllText(@"C:\PersonalManager\"+listBox1.Items[i]+@"\first.txt"));

string.Replace只有一个参数没有重载。它总是两个。

只是为了给你一个起点:

private void button5_Click(object sender, EventArgs e)
{
    //populate the list of people
    listBox1.Items.Clear();
    string[] dirs = Directory.GetDirectories(@"C:\PersonalManager\");
    foreach (string dir in dirs)
    {

       var filePathToRead = Path.Combine(dir, "first.txt");
       var allTextOfTheFile = File.ReadAllText(filePathToRead);

        // now you can work with the content of the file

        listBox1.Items.Add(Path.GetFileName(dir));
    }
}