簡體   English   中英

如何清除表單中所有textBoxes的文字?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM