首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

.NET 遍歷表單控制項:尋找並操作 TextBox 完整範例

     編輯:ASP.NET 基礎

應用場景

在 WinForms 或 WebForms 中,常需批次處理特定類型控制項,例如:清空所有 TextBox、設定唯讀、驗證輸入等。本文示範如何遞迴遍歷控制項集合,找出所有 TextBox 並賦值。

核心程式碼

foreach (Control control in this.Controls)
{
    // 判斷是否為 TextBox (含繼承關係)
    if (control is TextBox)
    {
        // 型別轉換 (Liskov 替換原則)
        TextBox textBox = (TextBox)control;
        // 執行想要的操作
        textBox.Text = "Hello World.";
    }
}

進階版:遞迴遍歷巢狀容器

上述程式碼僅遍歷第一層控制項,若 TextBox 置於 Panel、GroupBox、TabPage 等容器內,需遞迴搜尋:

/// 
/// 遞迴遍歷控制項樹,對所有 TextBox 執行指定動作
/// 
public void ProcessAllTextBoxes(Control parent, Action action)
{
    foreach (Control ctrl in parent.Controls)
    {
        if (ctrl is TextBox tb)
        {
            action(tb);
        }
        // 若有子控制項,遞迴進入
        if (ctrl.HasChildren)
        {
            ProcessAllTextBoxes(ctrl, action);
        }
    }
}

// 呼叫範例:將所有 TextBox 文字設為 "Hello World."
ProcessAllTextBoxes(this, tb => tb.Text = "Hello World.");

關鍵點說明

  1. is 關鍵字:執行型別檢查並同時支援繼承關係 (如 MaskedTextBox 也會被視為 TextBox 的子類別)。
  2. 型別轉換:確認型別後可安全轉換,C# 7.0+ 可使用模式比對 if (ctrl is TextBox tb) 簡化寫法。
  3. Controls 集合:每個 Control 皆擁有 Controls 屬性,形成樹狀結構。
  4. 效能考量:控制項樹深度通常不大,遞迴開銷可忽略;若極大量控制項可改用迭代器堆疊避免堆疊溢位。

常見應用擴展

  • 清空輸入:action(tb) => tb.Clear()
  • 設為唯讀:action(tb) => tb.ReadOnly = true
  • 驗證非空:action(tb) => { if (string.IsNullOrWhiteSpace(tb.Text)) errors.Add(tb.Name); }
  • 套用樣式:action(tb) => tb.CssClass = "form-control" (WebForms)

WebForms 注意事項

ASP.NET WebForms 中,this.Controls 僅包含頁面最上層控制項,ContentPlaceHolder、Form、UpdatePanel 等皆為容器,實務上建議從 Page.Form 或特定容器開始遞迴,或使用 Page.FindControl 定位特定命名控制項。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved