-1

我正在通过File.ReadAllText从文件中加载值,直接进入 ListBox1

该文件是 .txt - 逗号分隔。

健康食品.txt

内容

乳制品、水果、蔬菜、全谷物

以简单的方式填充 Listbox1 (LstBox_HealthyCat)(没有应用条件)实际上几乎没有我的 Helper-Method 的帮助,所以我不会为其他文件重复我的代码(:

public string GetFileContent(string FileName)
{
    string Filecontent = "";
    string ExtTXT = ".txt";
    string initialDir = @"G:\RobDevI5-3xRaid-0\Projects\WindowsFormsApplication1\bin\x64\Debug\HealthFood\";

    Filecontent = File.ReadAllText(intialDir + FileName + ExtTXT);
    return Filecontent;

}

string[] HealthyFood = GetFileContent(HealthyFood).Split(',');
LstBox_HealthyCat.Items.AddRange(HealthyFood);

所以现在结果是 ListBoxMainCategory 将是

乳制品

水果

蔬菜

全谷类

到目前为止,它是新开发人员的好例子

我的问题是,下一步我想填充健康食品的子类别,例如水果

水果.txt

内容:

苹果、香蕉、樱桃、枣

因此,当我单击 Main Category: Fruits 时,它将填充 ListBox2 并选择 ListBox1 和 listBox1 中可用的其余项目(单击时)。

替代我的

 Filecontent = File.ReadAllText(intialDir + FileName + ExtTXT);

蒂姆施梅尔特的代码:

 System.IO.Path.Combine(initialDir, item + ExtTXT); 

路径结合...不错的一个!

4

2 回答 2

1

如果您有与 ListBox1 中的类别同名的文件,那么您所要做的就是将此类别传递给您的辅助函数并使用结果来填充 ListBox2。

这可以在 SelectedIndexChanged 事件中轻松完成

private void LstBox_HealthyCat_SelectedIndexChanged(object sender, System.EventArgs e)
{
   // Get the currently selected item in the ListBox. 
   string curCategory = LstBox_HealthyCat.SelectedItem.ToString();
   string[] subCatItems = GetFileContent(curCategory).Split(','); 

   // Clear the previous list of foods from the second listbox
   ListSubCategory.Items.Clear();
   ListSubCategory.Items.AddRange(subCatItems); 
}

请记住,此示例假定您initialDir在 GetFileContent 方法中的变量标识的文件夹中有以下文本文件

  • 乳制品.txt
  • 水果.txt
  • 蔬菜.txt
  • 全谷物.txt
于 2012-08-21T21:37:32.047 回答
1

因此,如果我正确理解了您的要求,您希望根据 ListBox1 的 SelectedItem(s) 填充第二个 ListBox。例如,如果fruit选择了则fruits.txt应该使用等等。那么这可能会帮助你:

const string initialDir = @"G:\RobDevI5-3xRaid-0\Projects\WindowsFormsApplication1\bin\x64\Debug\HealthFood\";
const string ExtTXT = ".txt";

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    listBox2.Items.Clear();
    foreach (String item in listBox1.SelectedItems)
    {
        String path = System.IO.Path.Combine(initialDir, item + ExtTXT);
        if(System.IO.File.Exists(path))
        {
            listBox2.Items.AddRange(System.IO.File.ReadAllText(path).Split(','));
        }
    }
}
于 2012-08-21T21:52:54.503 回答