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

C# 統一獲取設置 UI 控件值(一):約定命名與反射綁定基礎

     編輯:關於C語言

痛點

手動編寫 user.Name = txtName.Text; txtName.Text = user.Name; 繁瑣、易錯、難維護。

約定優於配置

  • 實體屬性 Name ↔ 控件 ID txtName(前綴 txt 表示 TextBox)。
  • 前綴表:

核心輔助類雛形


public enum CtlType { TextBox, DropDownList, ComboBox, Hidden, CheckBox }

public class ControlHelper
{
    public static readonly string[] PrefixTable = new string[5];

    static ControlHelper()
    {
        PrefixTable[(int)CtlType.TextBox] = "txt";
        PrefixTable[(int)CtlType.DropDownList] = "drp";
        PrefixTable[(int)CtlType.ComboBox] = "cmb";
        PrefixTable[(int)CtlType.Hidden] = "hdn";
        PrefixTable[(int)CtlType.CheckBox] = "chk";
    }

    // 解析控件 ID 獲取屬性名
    private static string ParseControlID(string id, CtlType type)
    {
        return id.Substring(PrefixTable[(int)type].Length); // 簡化版,實際需 Replace
    }
}

實體示例


class User
{
    public string Name { get; set; }
    public string Pwd { get; set; }
}
// 對應控件:txtName, txtPwd

反射綁定核心邏輯


// 實體 → UI
public static void SetControlsValues(Control root, object entity)
{
    foreach (Control c in GetAllControls(root))
    {
        CtlType type = GetControlType(c);
        string propName = ParseControlID(c.Name, type);
        PropertyInfo pi = entity.GetType().GetProperty(propName);
        if (pi != null && pi.CanWrite)
            pi.SetValue(entity, GetControlValue(c, type), null);
    }
}

// UI → 實體
public static void GetControlsValues(Control root, object entity)
{
    // 類似邏輯,調用 pi.GetValue 並設置控件
}

系列規劃

  1. 本文:約定命名、前綴表、反射綁定雛形。
  2. 統一 WinForm/WebForm 訪問接口 (IControl + 適配器)。
  3. 完善 ControlHelper:獲取/設置/驗證/樣式/清空全套操作。
  4. Controller 模式實現邏輯與視圖分離。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
控件類型前綴枚舉值
TextBoxtxtCtlType.TextBox
DropDownList / ComboBoxdrp / cmbCtlType.DropDownList / ComboBox
HiddenhdnCtlType.Hidden
CheckBoxchkCtlType.CheckBox