private void CleanForm()
{
foreach (var c in this.Controls)
{
if (c is TextBox)
{
((TextBox)c).Text = String.Empty;
}
}
}
上述方法不起作用,控件没有被清除。它可以编译成功,但没有任何效果。
有什么想法吗?
我喜欢 lambda :)
private void ClearTextBoxes()
{
Action<Control.ControlCollection> func = null;
func = (controls) =>
{
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Clear();
else
func(control.Controls);
};
func(Controls);
}
祝好运!
this.Controls
,问题就会显露出来:您需要递归遍历所有子控件。private void CleanForm()
{
traverseControlsAndSetTextEmpty(this);
}
private void traverseControlsAndSetTextEmpty(Control control)
{
foreach(var c in control.Controls)
{
if (c is TextBox) ((TextBox)c).Text = String.Empty;
traverseControlsAndSetTextEmpty(c);
}
}
private void CleanForm(Control ctrl)
{
foreach (var c in ctrl.Controls)
{
if (c is TextBox)
{
((TextBox)c).Text = String.Empty;
}
if( c.Controls.Count > 0)
{
CleanForm(c);
}
}
}
当你最初调用 ClearForm 时,传入 this 或 Page(我假设'this'就是Page)。
我改进/修复了我的扩展方法。
public static class ControlsExtensions
{
public static void ClearControls(this Control frm)
{
foreach (Control control in frm.Controls)
{
if (control is TextBox)
{
control.ResetText();
}
if (control.Controls.Count > 0)
{
control.ClearControls();
}
}
}
}
您的文本框可能位于面板或其他容器内,而不是直接位于表单中。
您需要递归遍历每个子控件的Controls
集合。
这段代码可以清除表单中所有控件的内容,如文本框、复选框和单选按钮。
您可以添加您想要的不同类型。
private void ClearTextBoxes(Control control)
{
foreach (Control c in control.Controls)
{
if (c is TextBox)
{
((TextBox)c).Clear();
}
if (c.HasChildren)
{
ClearTextBoxes(c);
}
if (c is CheckBox)
{
((CheckBox)c).Checked = false;
}
if (c is RadioButton)
{
((RadioButton)c).Checked = false;
}
}
}
foreach (TextBox textBox in Controls.OfType<TextBox>())
textBox.Text = "";
由于这里的回答都没有帮到我,所以我将发布对我有用的解决方案。
当您在组合框中有文本框时,无法使用基本的this.Control
操作。
您需要创建一个双重foreach循环序列,循环进入每个组合框查找文本框。
尝试使用以下代码:
public void CleanTxTBoxes()
{
foreach (var groupbox in this.Controls.OfType<GroupBox>())
{
foreach (var textboxitem in groupbox.Controls.OfType<TextBox>())
{
textboxitem.Clear();
}
}
}
试试这个:
var t = this.Controls.OfType<TextBox>().AsEnumerable<TextBox>();
foreach (TextBox item in t)
{
item.Text = "";
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if(keyData==Keys.C)
{
RefreshControl();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
TextBoxBase
而不是TextBox
;这将自动包括多行文本框、富文本框等。 - Timwi