[英]How to clear the text of all textBoxes in the form?
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”)。
我改進/修復了我的擴展方法。
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
集合。
也許你想要更簡單和簡短的方法。 這也將清除所有文本框。 (Panel 或 GroupBox 內的 TextBoxes 除外)。
foreach (TextBox textBox in Controls.OfType<TextBox>())
textBox.Text = "";
這用於清除表單中的所有控件,如文本框、復選框、單選按鈕
你可以添加你想要的不同類型..
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;
}
}
}
由於這里的答案都沒有幫助我,所以我發布了對我有用的解決方案。
這適用於組框內有文本框的情況,因此您不能使用基本的this.Control
進行操作
您將需要創建一個雙 foreach secuence,循環到每個組框以查找文本框。
嘗試使用這個:
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);
}
groupBoxName.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.