C# 进度条应反映选中的复选框数
每次选中复选框时,我都希望能够以增量方式添加到进度条中。假设四个复选框中有一个是选中的,那么它将等于进度条的25%。此外,如果取消选中4个复选框中的一个,进度条将相应减少。这就是我所拥有的,我被困在其中C# 进度条应反映选中的复选框数,c#,winforms,checkbox,progress-bar,C#,Winforms,Checkbox,Progress Bar,每次选中复选框时,我都希望能够以增量方式添加到进度条中。假设四个复选框中有一个是选中的,那么它将等于进度条的25%。此外,如果取消选中4个复选框中的一个,进度条将相应减少。这就是我所拥有的,我被困在其中 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Syste
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void progressBar1_Click(object sender, EventArgs e)
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
int num1 = progressBar1.Maximum / 4;
int num2 = progressBar1.Maximum / 4;
int num3 = progressBar1.Maximum / 4;
int num4 = progressBar1.Maximum / 4;
int numAns;
numAns = num1 + num2 + num3 + num4;
progressBar1.Value = numAns;
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if(checkBox1.Checked == true)
{
}
else if (checkBox1.Checked == false)
{
}
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
}
private void checkBox4_CheckedChanged(object sender, EventArgs e)
{
}
}
}单击取消ProgressBar1,对于每个框,只需从ProgressBar1中添加(如果选中)或减去(如果未选中)25即可。选中时的值已更改 取消ProgressBar1\u单击,对于每个框,只需从ProgressBar1中添加(如果选中)或减去(如果未选中)25即可。选中时的值已更改 您可以对所有复选框使用相同的事件处理程序,而无需为4个复选框创建4个方法
private const Int32 TOTAL_CHECKBOXES = 4;
private static Int32 s_Checks = 0;
private void OnCheckedChanged(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
++s_Checks;
else
--s_Checks;
progressBar.Value = s_Checks * (progressBar.Maximum / TOTAL_CHECKBOXES);
}
您可以对所有复选框使用相同的事件处理程序,而无需对4个复选框使用4个方法
private const Int32 TOTAL_CHECKBOXES = 4;
private static Int32 s_Checks = 0;
private void OnCheckedChanged(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
++s_Checks;
else
--s_Checks;
progressBar.Value = s_Checks * (progressBar.Maximum / TOTAL_CHECKBOXES);
}
您可以将同一事件关联到所有复选框。我将我的添加到了一个列表中,因此如果您希望在将来添加更多,只需添加处理程序并将其添加到列表中,您就完成了
public Form1()
{
InitializeComponent();
checkBox1.CheckedChanged += CheckedChanged_1;
checkBox2.CheckedChanged += CheckedChanged_1;
checkBox3.CheckedChanged += CheckedChanged_1;
checkBox4.CheckedChanged += CheckedChanged_1;
checkboxesToCount.AddRange(new CheckBox[] {checkBox1, checkBox2, checkBox3, checkBox4});
}
private void CheckedChanged_1(object sender, EventArgs e)
{
progressBar1.Value = 100 * checkboxesToCount.Count((c) => { return c.Checked; }) / checkboxesToCount.Count;
}
您可以将同一事件关联到所有复选框。我将我的添加到了一个列表中,因此如果您希望在将来添加更多,只需添加处理程序并将其添加到列表中,您就完成了
public Form1()
{
InitializeComponent();
checkBox1.CheckedChanged += CheckedChanged_1;
checkBox2.CheckedChanged += CheckedChanged_1;
checkBox3.CheckedChanged += CheckedChanged_1;
checkBox4.CheckedChanged += CheckedChanged_1;
checkboxesToCount.AddRange(new CheckBox[] {checkBox1, checkBox2, checkBox3, checkBox4});
}
private void CheckedChanged_1(object sender, EventArgs e)
{
progressBar1.Value = 100 * checkboxesToCount.Count((c) => { return c.Checked; }) / checkboxesToCount.Count;
}
这真的帮了我很大的忙。我本该把这个放进去的,但忘了。如何使按钮清除所有复选框并重置progressBar.foreach(复选框中的复选框cb)cb.Checked=false;progressBar.值=progressBar.最小值;这真的帮了我很大的忙。我本该把这个放进去的,但忘了。如何使按钮清除所有复选框并重置progressBar.foreach(复选框中的复选框cb)cb.Checked=false;progressBar.值=progressBar.最小值;