已解决

这段代码还有别的写法吗?已解决

学员:徐豫锋提问时间:2008-10-12 21:15:14

/// <summary>
/// 清空所有的文本框
/// </summary>
private void ClearTextBox()
{
foreach (Control ctl in form1.Controls)
{
TextBox txt = ctl as TextBox;
if (txt != null)
txt.Text = "";
}
}
如何可以判断ctl是不是TextBox,还有别的写法吗?总感觉这个方法不是很直观。。。。

采纳为答案

回答人:amandag(高歌 .NET学习顾问)回答时间:2008-10-13 11:47:01

我试了一下
private void ClearTextBox()
{
TextBox txt;
foreach (Control ctl in this.Controls)
{
if (ctl is TextBox)
{
txt = (TextBox)ctl;
txt.Text = string.Empty;
}
}
}
在winform下没有问题可以成功运行,如果你是web应用程序,需要改为
private void ClearTextBox()
{
TextBox txt;
foreach (Control ctl in this.Form.Controls)
{
if (ctl is TextBox)
{
txt = (TextBox)ctl;
txt.Text = string.Empty;
}
}
}

学员对该答案的评价 谢谢,问题解决了

其他回答

回答人:polarstar (.NET学习顾问)回答时间:2008-10-12 21:42:14
1。MSDN对as关键字的解释:
as 操作符的作用就像强制转换,所不同的是,当转换失败时,它返回null。
也就是当ctl不是TextBox时,TextBox txt = ctl as TextBox;执行后,ctl为null。
2。上面代码还可以这样写
foreach (Control ctl in form1.Controls)
{
if (ctl.GetType() == typeof(TextBox))
{
TextBox txt = (TextBox)ctl;//这句也可以写成:TextBox txt = ctl as TextBox;
txt.Text = "text";
}
}
回答人:polarstar (.NET学习顾问)回答时间:2008-10-12 21:43:15
if (ctl.GetType() == typeof(TextBox))//判断ctl是不是TextBox
回答人:polarstar (.NET学习顾问)回答时间:2008-10-12 21:45:51
晕,txt.Text = "text";应该是txt.Text = "";terribly sorry.
回答人:amandag(高歌 .NET学习顾问)回答时间:2008-10-12 22:29:00
如果是winform的话,把你原来的代码改一下,下面这个应该是最通用的了
private void ClearTextBox()
{
foreach (Control ctl in this.Controls)
{
TextBox txt = ctl as TextBox;
if (txt != null)
txt.Text = string.Empty;
}
}
回答人:amandag(高歌 .NET学习顾问)回答时间:2008-10-12 22:37:26
也可以用is完成,但效率没有as高,因为判断一个对象是(is)某种类型比判断一个对象是否是空引用(as)更麻烦点
private void ClearTextBox()
{
TextBox txt;
foreach (Control ctl in this.Controls)
{
if (ctl is TextBox)
{
txt = (TextBox)ctl;
txt.Text = string.Empty;
}
}
}
回答人:徐豫锋回答时间:2008-10-13 06:56:53
我试过了,下面的方法无效:
private void ClearTextBox()
{
TextBox txt;
foreach (Control ctl in this.Controls)
{
if (ctl is TextBox)
{
txt = (TextBox)ctl;
txt.Text = string.Empty;
}
}
}