如何从文本文件中获取值并选择具有该值的复选框?

时间:2015-09-28 07:34:36

标签: c# winforms visual-studio-2012

如何从文本文件中获取值并选择具有该值的复选框?

我尝试使用此代码获取等于的值:

string installerfilename = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "installer.ini");
            IEnumerable<string> inilines = File.ReadAllLines(installerfilename).AsEnumerable();

            string selectedItem = checkedListBox1.SelectedItem.ToString();
            bool IsChecked = checkedListBox1.CheckedItems.Contains(selectedItem);
    inlines = inlines.Select(line => line == string.Format("‪product‬={0}", selectedItem))
                    ? Regex.Replace(line, string.Format("product={0}", selectedItem), string.Format(@"product={0}", selectedItem)) : line);

我也试过这个:

foreach (var line in inilines)
            {
                if (line.Contains("product={0}"))
                {
                    IsChecked = true;
                    //checkedListBox1.CheckedItems =true;
                }

但我不知道如何检查CheckedListBox中的框,这些框的行数等于行product="name of checkbox"

1 个答案:

答案 0 :(得分:2)

你可以这样做:

var lines = System.IO.File.ReadAllLines(@"D:\Test.txt");

lines.ToList()
     .ForEach(item =>
     {
         //check if item exists in CheckedListBox set it checked.
         //We find the index of the item, -1 means that item doesn't exists in CheckedListBox
         var index = this.checkedListBox1.Items.IndexOf(item);
         if(index >=0)
             this.checkedListBox1.SetItemChecked(index, true);
     });

注意:

  • 使用设置属性保存已检查的项目,而不是使用文件来保存和恢复已检查的项目。

检查所有项目:

要按照索引检查项目,您可以使用this.checkedListBox1.SetItemChecked(i, true);,因此,为了检查所有项目,您可以执行以下操作:

for (int i = 0; i < this.checkedListBox1.Items.Count; i++)
{
    this.checkedListBox1.SetItemChecked(i, true);
}

针对您的具体情况:

你有一个包含以下内容的文件:

product=item1
#product=item2
#product=item3
product=item4

这意味着应该检查item1和item4,您可以使用WhereSelect从行中选择所需内容,例如:

lines.Where(x=>!x.StartsWith("#"))
     .Select(x=>x.Replace("Product=","").Trim())
     .ToList()
     .ForEach(item =>
     {
         var index = this.checkedListBox1.Items.IndexOf(item);
         if(index >=0)
             this.checkedListBox1.SetItemChecked(index, true);
     });