下面的程序實際上並不是我的項目,但它可以讓我更容易理解我以後在真實程序中想要的內容。如何處理具有相同父項的不同事件處理程序?
這裏一個.gif查看當前功能:
我想要什麼? 我想添加一個標籤總積分。其中包括複選框和文本框的點,這應該也是實時計算。對於每個組(面板)
問題在哪裏? 我不知道如何管理這個,因爲我正在處理兩個不同的事件處理程序。
這裏是源:
namespace Test1
{
public partial class Form1 : Form
{
int chkBoxX = 10;
int chkBoxY = 30;
int txtBoxX = 10;
int txtBoxY = 50;
int panelX = 0;
int panelY = 0;
public Form1()
{
InitializeComponent();
for (int k = 1; k <= 3; k++)
{
Panel panel = new Panel();
panel.Width = 550;
panel.Height = 100;
panel.Location = new Point(panelX, panelY);
panel.BackColor = Color.RoyalBlue;
panelY += 110;
this.Controls.Add(panel);
AddElements(panel);
}
}
void AddElements(Panel panel) {
Label labelChkBoxPoints = new Label();
labelChkBoxPoints.Name = "labelChkBoxPoints";
labelChkBoxPoints.Location = new Point(400, 30);
labelChkBoxPoints.AutoSize = true;
labelChkBoxPoints.BackColor = Color.White;
labelChkBoxPoints.Font = new Font(labelChkBoxPoints.Font.FontFamily, 12, FontStyle.Bold);
panel.Controls.Add(labelChkBoxPoints);
Label labelTxtBoxPoints = new Label();
labelTxtBoxPoints.Name = "labelTxtBoxPoints";
labelTxtBoxPoints.Location = new Point(400, 50);
labelTxtBoxPoints.AutoSize = true;
labelTxtBoxPoints.BackColor = Color.White;
labelTxtBoxPoints.Font = new Font(labelChkBoxPoints.Font.FontFamily, 12, FontStyle.Bold);
panel.Controls.Add(labelTxtBoxPoints);
Label labeltotalPoints = new Label();
labeltotalPoints.Location = new Point(430, 40);
labeltotalPoints.Font = new Font(labeltotalPoints.Font.FontFamily, 14, FontStyle.Bold);
// labeltotalPoints.Text = "10XXXXXXXXXXXX0";
labeltotalPoints.AutoSize = true;
labeltotalPoints.BackColor = Color.White;
// labeltotalPoints.;
panel.Controls.Add(labeltotalPoints);
for (int i = 1; i <= 5; i++)
{
CheckBox checkBox = new CheckBox();
checkBox.Name = String.Format("checkBox{0}", i);
checkBox.Text = "";
checkBox.Width = 20;
checkBox.Height = 15;
checkBox.Location = new Point(chkBoxX, chkBoxY);
chkBoxX += 26;
checkBox.CheckedChanged += checkBox_CheckedChanged;
panel.Controls.Add(checkBox);
}
for (int j = 1; j <= 5; j++)
{
TextBox tb = new TextBox();
tb.Name = String.Format("textBox{0}", j);
tb.Width = 60;
tb.Location = new Point(txtBoxX, txtBoxY);
txtBoxX += 80;
tb.TextChanged += txtBox_CheckedChanged;
panel.Controls.Add(tb);
}
chkBoxX -= (5 * 26);
txtBoxX -= (5 * 80);
}
private void txtBox_CheckedChanged(object sender, EventArgs e)
{
int total = 0; int points = 0;
foreach (object tb in ((TextBox)sender).Parent.Controls)
{
if (tb is TextBox)
{
if (!string.IsNullOrEmpty(((TextBox)tb).Text))
{
if (!int.TryParse(((TextBox)tb).Text, out points))
{
((TextBox)tb).Text = "";
}
total += points;
}
}
}
(((TextBox)sender).Parent.Controls["labelTxtBoxPoints"]).Text = Convert.ToString(total);
}
private void checkBox_CheckedChanged(object sender, EventArgs e)
{
int counter = 0;
foreach (object cb in ((CheckBox)sender).Parent.Controls)
{
if (cb is CheckBox)
{
if (((CheckBox)cb).Checked)
{
counter++;
}
}
}
(((CheckBox)sender).Parent.Controls["labelChkBoxPoints"]).Text = Convert.ToString(counter);
}
}
}
它是如何工作的?你有什麼感受? –
所以你想在每個組的底部添加點在下面的總點數? –
@ user3956566是的,正確的。 – Iljaminati