如何为CheckedListBox中的所有项创建循环?

时间:2015-09-25 05:34:12

标签: c# winforms

我遇到了一个复杂的问题,而且我找不到任何帮助。我有一个WindowsFormApp,而在Form2我有一个CheckedListBox,他是这样的:

|_|Simulink
|_|Aerospace Blockset
|_|Bioinformatics

和其他许多行。

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}

我希望,当我选中其中一个checkBoxes获取名称时:Simulink,例如,如果选中SimulinkAer...并在文本中验证文件instaler.ini谁在这里:

string installerfilename = Path + "installer.ini";
var link = (Path + "installer.ini").ToString();
var lines = File.ReadAllLines(link);

我的名字是Simulink #product=之后的#product=Simulink,如下所示:#并删除了#,并添加product=all我{ {1}} => #product=all(这适用于所有情况)。 你可以帮我为所有checkboxes创建一个循环,因为我尝试过的只是为checkboxes创建一个事件但是要复杂,在那种模式下我有很多代码?

2 个答案:

答案 0 :(得分:1)

使用Regex.Replace和string.replace更新产品文本文件。

    private void chklbproduct_SelectedIndexChanged(object sender, EventArgs e)
    {
        string installerfilename = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "Installer.txt");
        IEnumerable<string> inilines = File.ReadAllLines(installerfilename).AsEnumerable();

        string selectedItem = chklbproduct.SelectedItem.ToString();
        bool IsChecked = chklbproduct.CheckedItems.Contains(selectedItem);

        if (IsChecked)
            inilines = inilines.Select(line => line == string.Format("#product={0}", selectedItem) 
                                               ? line.Replace(line, string.Format("#product={0}", selectedItem), string.Format(@"product={0}", selectedItem))
                                               : line);

        else
            inilines = inilines.Select(line => (line == string.Format("#product={0}", selectedItem) || line == string.Format(@"product={0}", selectedItem)) 
                                               ? line.Replace(line, string.Format(@".*product={0}", selectedItem), string.Format(@"#product={0}", selectedItem)) 
                                               : line);


        if (chklbproduct.CheckedItems.Count == 0)
            inilines = inilines.Select(line => Regex.Replace(line, @".*product=all", @"product=all"));
        else
            inilines = inilines.Select(line => Regex.Replace(line, @".*product=all", @"#product=all"));


        string strWrite = string.Join(Environment.NewLine, inilines.ToArray());
        File.WriteAllText(installerfilename, strWrite);

    }

答案 1 :(得分:0)

通过在设计器中单击它来为每个复选框命名,然后在属性窗格中填写name属性。您现在可以轻松引用

背后的代码中的复选框

Property pane with name highlighted

现在在代码背后,您可以自己创建所有复选框的列表。请务必在>在构造函数中调用InitializeComponent方法后执行

public class MyForm
{
    List<CheckBox> checkboxes;

    public MyForm()
    {
        // Call InitializeComponent first
        // or all the checkboxes will be null
        InitializeComponent();

        checkboxes = new List<CheckBox>();
        checkboxes.add(myCheckBox1);
        checkboxes.add(myCheckBox2); 
        // etc...
    }
}

您现在可以循环复选框并执行必要的操作,例如单击按钮时:

public void Button1_Clicked(...)
{

    // Loop over all checkboxes that are checked
    foreach(var checkbox in checkboxes.Where(x => x.Checked))
    {
        switch(checkbox.Name)
        {
            case "myCheckBox1":
                // MyCheckBox1 is checked, do something
                break;

            case "myCheckBox2":
               // MyCheckBox2 is checked, do something
               break;
        }
    }
}