计算表单中文本框和复选框的数量
本文关键字:复选框 表单 中文 文本 计算 | 更新日期: 2023-09-27 18:23:45
我的要求是,当用户单击按钮'btnGetCount'
时,用id="form1"
计算表单内直接存在的TextBox和CheckBox的总数。这是我尝试过的代码,但它不计数,计数器保持为零,尽管我在表单中有三个TextBoxes和两个CheckBoxes。但是,如果我删除foreach循环并传递TextBox control = new TextBox();
而不是当前代码,那么它会计数第一个TextBox,countTB会将值返回为1。
protected void btnGetCount_Click(object sender, EventArgs e)
{
Control control = new Control();
int countCB = 0;
int countTB = 0;
foreach (Control c in this.Controls)
{
if (control.GetType() == typeof(CheckBox))
{
countCB++;
}
else if (control is TextBox)
{
countTB++;
}
}
Response.Write("No of TextBoxes: " + countTB);
Response.Write("<br>");
Response.Write("No of CheckBoxes: " + countCB);
}
您必须递归地循环通过其他控件。
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
<asp:CheckBox ID="cb" runat="server"></asp:CheckBox>
</div>
</form>
protected void Page_Load(object sender, EventArgs e)
{
var controls = form1.Controls;
var tbCount = 0;
var cbCount = 0;
CountControls(ref tbCount, controls, ref cbCount);
Response.Write(tbCount);
Response.Write(cbCount);
}
private static void CountControls(ref int tbCount, ControlCollection controls, ref int cbCount)
{
foreach (Control wc in controls)
{
if (wc is TextBox)
tbCount++;
else if (wc is CheckBox)
cbCount++;
else if(wc.Controls.Count > 0)
CountControls(ref tbCount, wc.Controls, ref cbCount);
}
}
由于您正在计算无法使用的控制控件类型,因此它允许给您零。请将代码更改为:
protected void btnGetCount_Click(object sender, EventArgs e)
{
int countCB = 0;
int countTB = 0;
foreach (Control c in this.Controls)
{
if (c.GetType() == typeof(CheckBox))
{
countCB++;
}
else if (c.GetType()== typeof(TextBox))
{
countTB++;
}
}
Response.Write("No of TextBoxes: " + countTB);
Response.Write("<br>");
Response.Write("No of CheckBoxes: " + countCB);
}
我认为您必须是递归的,this.Controls
将只返回作为其直接子级的控件。如果TextBox
在其中的一个控件组中,那么您还需要查看容器控件。
请参阅其他堆栈流的答案:如何获取特定类型的Windows窗体(按钮/文本框)的所有子控件?
编辑:我知道答案是针对WinForms的,但解决方案仍然适用。
只需对Alyafey、pcnThird和Valamas建议的代码进行一些小的更改,我就编写了这段有效的代码。
protected void btnGetCount_Click(object sender, EventArgs e)
{
int countCB = 0;
int countTB = 0;
foreach (Control c in form1.Controls) //here is the minor change
{
if (c.GetType() == typeof(CheckBox))
{
countCB++;
}
else if (c.GetType()== typeof(TextBox))
{
countTB++;
}
}
Response.Write("No of TextBoxes: " + countTB);
Response.Write("<br>");
Response.Write("No of CheckBoxes: " + countCB);
}