通过Listbox1单击填充列表框2相应

时间:2012-08-21 21:31:56

标签: c# winforms listbox filereader arrays

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

文件是.txt - 逗号分隔。

HealthyFood.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将是

乳制品

水果

蔬菜

全谷物

到目前为止,它是新开发者的好榜样

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

fruits.txt

内容:

苹果,香蕉,樱桃,日期

所以当我点击主要类别:水果时 它将使用ListBox1的选择填充ListBox2 其余的项目也可以在listBox1中使用(点击时)。

替代

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

Tim Schmelter的代码:

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

路径合并 ...很好!

2 个答案:

答案 0 :(得分: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); 
}

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

  • Dairy.txt
  • Fruits.txt
  • Vegetables.txt
  • Whole Grains.txt

答案 1 :(得分:1)

因此,如果我正确理解您的要求,您希望根据ListBox1的SelectedItem填充第二个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(','));
        }
    }
}