如何为多个 checkbox.Checked 编写一个事件?
How to write an event for multiple checkbox.Checked?
我正在构建一个管道服务 windows 表单,其中包含三个复选框,每个复选框的总计不同,代表服务类型。如果勾选了两个或更多,我将如何合并它们的总数,以便它们可以显示在指定的文本框中,而不是只显示单个金额。
private void apprenticeCheck_CheckedChanged(object sender, EventArgs e)
{
double apprenticeCost;
apprenticeCost = 55.00 + CALLOUT_AMOUNT;
if (apprenticeCheck.Checked)
serviceTotalText.Text = apprenticeCost.ToString("C");
您可以创建一个变量来跟踪总金额,并在每次选中任何复选框时更新此变量
const int CALLOUT_AMOUNT = 5;
double TotalCost = 0;
private void apprenticeCheck_CheckedChanged(object sender, EventArgs e)
{
double apprenticeCost = 55.00 + CALLOUT_AMOUNT;
if (apprenticeCheck.Checked)
TotalCost += apprenticeCost;
else
TotalCost -= apprenticeCost;
serviceTotalText.Text = TotalCost.ToString("C");
}
一个简单的方法,创建一个class来表示一个服务。
public class Service
{
public int Id { get; set; }
public string Name { get; set; }
public double Cost { get; set; }
}
使用 CheckBox 的私有列表,为每个 CheckBox 分配 OnCheckedChanged 事件。在 Check changed 事件中,使用 lambda 语句获取已选中 CheckBox 的总数。
代码假定 CheckBox 控件直接位于窗体上。
namespace PlumbingExample
{
public partial class Form1 : Form
{
private readonly List<CheckBox> _checkBoxes;
private double _serviceCharge = 5d;
public Form1()
{
InitializeComponent();
Shown += OnShown;
_checkBoxes = Controls.OfType<CheckBox>().ToList();
}
private void OnShown(object sender, EventArgs e)
{
Service1CheckBox.Tag = new Service() { Id = 1, Name = "Service 1", Cost = 45.00d };
Service2CheckBox.Tag = new Service() { Id = 2, Name = "Service 2", Cost = 55.00d };
Service3CheckBox.Tag = new Service() { Id = 3, Name = "Service 3", Cost = 65.00d };
_checkBoxes.ForEach(x => x.CheckStateChanged += CheckBoxOnCheckedChanged);
serviceTotalText.Text = "[=11=].00";
}
private void CheckBoxOnCheckedChanged(object sender, EventArgs e)
{
var total = _checkBoxes
.Where(checkBox => checkBox.Checked)
.Select(checkBox => ((Service)checkBox.Tag).Cost + _serviceCharge)
.Sum();
serviceTotalText.Text = total.ToString("C");
serviceTotalText.Tag = total;
}
}
}
我正在构建一个管道服务 windows 表单,其中包含三个复选框,每个复选框的总计不同,代表服务类型。如果勾选了两个或更多,我将如何合并它们的总数,以便它们可以显示在指定的文本框中,而不是只显示单个金额。
private void apprenticeCheck_CheckedChanged(object sender, EventArgs e)
{
double apprenticeCost;
apprenticeCost = 55.00 + CALLOUT_AMOUNT;
if (apprenticeCheck.Checked)
serviceTotalText.Text = apprenticeCost.ToString("C");
您可以创建一个变量来跟踪总金额,并在每次选中任何复选框时更新此变量
const int CALLOUT_AMOUNT = 5;
double TotalCost = 0;
private void apprenticeCheck_CheckedChanged(object sender, EventArgs e)
{
double apprenticeCost = 55.00 + CALLOUT_AMOUNT;
if (apprenticeCheck.Checked)
TotalCost += apprenticeCost;
else
TotalCost -= apprenticeCost;
serviceTotalText.Text = TotalCost.ToString("C");
}
一个简单的方法,创建一个class来表示一个服务。
public class Service
{
public int Id { get; set; }
public string Name { get; set; }
public double Cost { get; set; }
}
使用 CheckBox 的私有列表,为每个 CheckBox 分配 OnCheckedChanged 事件。在 Check changed 事件中,使用 lambda 语句获取已选中 CheckBox 的总数。
代码假定 CheckBox 控件直接位于窗体上。
namespace PlumbingExample
{
public partial class Form1 : Form
{
private readonly List<CheckBox> _checkBoxes;
private double _serviceCharge = 5d;
public Form1()
{
InitializeComponent();
Shown += OnShown;
_checkBoxes = Controls.OfType<CheckBox>().ToList();
}
private void OnShown(object sender, EventArgs e)
{
Service1CheckBox.Tag = new Service() { Id = 1, Name = "Service 1", Cost = 45.00d };
Service2CheckBox.Tag = new Service() { Id = 2, Name = "Service 2", Cost = 55.00d };
Service3CheckBox.Tag = new Service() { Id = 3, Name = "Service 3", Cost = 65.00d };
_checkBoxes.ForEach(x => x.CheckStateChanged += CheckBoxOnCheckedChanged);
serviceTotalText.Text = "[=11=].00";
}
private void CheckBoxOnCheckedChanged(object sender, EventArgs e)
{
var total = _checkBoxes
.Where(checkBox => checkBox.Checked)
.Select(checkBox => ((Service)checkBox.Tag).Cost + _serviceCharge)
.Sum();
serviceTotalText.Text = total.ToString("C");
serviceTotalText.Tag = total;
}
}
}