如何为两个复选框设置不同的事件
本文关键字:设置 复选框 事件 两个 | 更新日期: 2023-09-27 18:14:31
我有两部分代码:
private void Simulink_CheckedChanged_1(object sender, EventArgs e)
{
string installerfilename = path + "installer.ini";
string installertext = File.ReadAllText(installerfilename);
var lin = File.ReadLines(Path.Combine(path, "installer.ini")).ToArray();
CheckBox cb = sender as CheckBox;
if (cb.Checked)
{
var product = lin.Select(line => Regex.Replace(line, "product=all", "#product=all"));
var product_tool = product.Select(line => Regex.Replace(line, "#product=Simulink", "product=Simulink"));
File.WriteAllLines(installerfilename, product_tool);
}
else if (!cb.Checked)
{
return;
}
}
private void AerospaceBlockset_CheckedChanged(object sender, EventArgs e)
{
string installerfilename = path + "installer.ini";
string installertext = File.ReadAllText(installerfilename);
var lin = File.ReadLines(Path.Combine(path, "installer.ini")).ToArray();
CheckBox cb1 = sender as CheckBox;
if ( cb1.Checked )
{
var product = lin.Select(line => Regex.Replace(line, "product=all", "#product=all"));
var product_tool = product.Select(line => Regex.Replace(line, "#product=AerospaceBlockset", "product=AerospaceBlockset"));
File.WriteAllLines(installerfilename, product_tool);
}
else if (!cb1.Checked)
{
return;
}
}
第二个与第一个相同,换句话说,如果我在installer.ini文件中检查Simulink checkbox
或AerospaceBlockset checkbox
或两者,将产生相同的东西:
product=all => #product=all
#product=Simulink=> product=Simulink
要工作良好,需要出现在instaler.ini
文件中:
product=all => #product=all
#product=Simulink=> product=Simulink
如果选择了Simulink checkbox
并且:
product=all => #product=all
#product=AerospaceBlockset=> product=AerospaceBlockset
如果选择了CCD_ 5。
我该怎么做?
您可以将两个复选框的标记属性设置为所需的字符串,然后更改行
var product_tool = product.Select(line => Regex.Replace(line, "#product=AerospaceBlockset", "product=AerospaceBlockset"));
至
var product_tool = product.Select(line => Regex.Replace(line, "#product=" + ((sender as CheckBox).Tag as string), "product=" + ((sender as CheckBox).Tag as string)));
最后对两个复选框使用相同的功能。
在表单的构造函数中(假设为WinForms(,您可以将复选框的事件连接起来,如下所示:
Simulink.CheckedChanged += Simulink_CheckedChanged_1;
AerospaceBlockset.CheckedChanged += AerospaceBlockset_CheckedChanged;
(您可能需要删除设计器中的条目,这样就不会调用两次方法。(
这样,复选框将执行它们各自的事件。由于它们的操作基本相同,您可以考虑将该逻辑提取到另一个方法中,并使用合适的参数调用它:
private void Simulink_CheckedChanged_1(object sender, EventArgs e)
{
ProcessIniFile("Simulink");
}
在ProcessIniFile
中,您将在事件方法中执行现在正在执行的操作,但将硬编码的值替换为传入的参数。