我遇到了一个复杂的问题,而且我找不到任何帮助。我有一个WindowsFormApp
,而在Form2
我有一个CheckedListBox
,他是这样的:
|_|Simulink
|_|Aerospace Blockset
|_|Bioinformatics
和其他许多行。
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
我希望,当我选中其中一个checkBoxes
获取名称时:Simulink
,例如,如果选中Simulink
或Aer...
并在文本中验证文件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
创建一个事件但是要复杂,在那种模式下我有很多代码?
答案 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属性。您现在可以轻松引用
背后的代码中的复选框现在在代码背后,您可以自己创建所有复选框的列表。请务必在>>在构造函数中调用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;
}
}
}