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

WinForms 自定義控件:Label + TextBox 組合控件 (瀏覽/編輯雙模式)

     編輯:C++ 入門

需求背景

表單開發中常需「標籤 + 輸入框」固定組合,且需支援:

  • 瀏覽模式:顯示值 + 底線,不可編輯
  • 編輯模式:點擊值區域切換到 TextBox,可輸入/修改
  • 密碼模式:瀏覽時顯示 "Secret"
  • 可選字段名顯示
  • 底線顏色可自定義

控件組成

  • lblField (Label):字段名,可選隱藏
  • lblValue (Label):瀏覽模式顯示值,繪製底線
  • txtValue (TextBox):編輯模式輸入,初始隱藏置於 lblValue 後
  • timer (Timer):解決焦點切換時機問題

核心邏輯

  1. 模式切換:lblValue.MouseDown → 隱藏 Label、顯示 TextBox、複製文字、聚焦;txtValue.Leave → 反向切換、更新 Label 文字。
  2. 密碼處理:UseSystemPasswordChar 為 true 時,離開編輯模式顯示 "Secret"。
  3. 底線繪製:OnPaint 中用 Graphics.DrawLine 畫底線,根據字段名是否顯示調整 X 起點與寬度。
  4. 尺寸自適應:Anchor 屬性 + OnPaint 動態計算 Location/Width。

關鍵屬性封裝

public string UText { get => txtValue.Text; set { lblValue.Text = txtValue.Text = value; } }
public bool ReadOnly { get => txtValue.ReadOnly; set => txtValue.ReadOnly = value; }
public bool UserSystemPasswordChar { get => txtValue.UseSystemPasswordChar; set => txtValue.UseSystemPasswordChar = value; }
public Color LineColor { get => lineColor; set { lineColor = value; Invalidate(); } }
public string LBLText { get => lblField.Text; set => lblField.Text = value; }

事件轉發

public event EventHandler UTextChanged;
public event EventHandler UDoubleClick;
private void txtValue_TextChanged(object s, EventArgs e) => UTextChanged?.Invoke(s, e);
private void txtValue_DoubleClick(object s, EventArgs e) => UDoubleClick?.Invoke(s, e);

使用示例

拖放控件到表單,屬性視窗設置 LBLText、LineColor、UserSystemPasswordChar 等,即可獲得統一風格的輸入項。

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