zoukankan      html  css  js  c++  java
  • (二十七)c#Winform自定义控件-多输入窗体-HZHControls

    官网

    http://www.hzhcontrols.com

    前提

    入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

    如果觉得写的还行,请点个 star 支持一下吧

    欢迎前来交流探讨: 企鹅群568015492 企鹅群568015492

    目录

    https://www.cnblogs.com/bfyx/p/11364884.html

    准备工作

    这个窗体继承子基类窗体FrmWithOKCancel1,如果你对FrmWithOKCancel1还不了解,请移步 (二十五)c#Winform自定义控件-有确定取消的窗体(一) 查看

    开始

    添加一个Form,命名FrmInputs,继承FrmWithOKCancel1

    一个多参构造函数

      1  #region 构造函数
      2         /// <summary>
      3         /// 功能描述:构造函数
      4         /// 作  者:HZH
      5         /// 创建日期:2019-08-05 10:57:26
      6         /// 任务编号:POS
      7         /// </summary>
      8         /// <param name="strTitle">窗体标题</param>
      9         /// <param name="args">输入项名称</param>
     10         /// <param name="inTypes">输入项对应输入类型,key:输入项名称,如不设置默认不控制输入</param>
     11         /// <param name="regexs">输入项对应正则规则,当imTypes=Regex时有效,key:输入项名称,如不设置默认不控制输入</param>
     12         /// <param name="keyBoards">文本框键盘,key:输入项名称,如不设置默认英文键盘</param>
     13         /// <param name="mastInputs">必填输入项名称</param>
     14         /// <param name="defaultValues">输入项默认值,key:输入项名称</param>
     15         public FrmInputs(
     16             string strTitle,
     17             string[] inPutLabels,
     18             Dictionary<string, TextInputType> inTypes = null,
     19             Dictionary<string, string> regexs = null,
     20             Dictionary<string, HZH_Controls.Controls.KeyBoardType> keyBoards = null,
     21             List<string> mastInputs = null,
     22             Dictionary<string, string> defaultValues = null)
     23         {
     24             InitializeComponent();
     25             this.Title = strTitle;
     26             if (inPutLabels.Length <= 0)
     27             {
     28                 throw new Exception("输入数量不能为空");
     29             }
     30             try
     31             {
     32                 Values = new string[inPutLabels.Length];
     33                 HZH_Controls.ControlHelper.FreezeControl(this, true);
     34 
     35                 for (int i = inPutLabels.Length - 1; i >= 0; i--)
     36                 {
     37                     Panel p = new Panel();
     38                     p.Dock = DockStyle.Top;
     39                     p.Height = 62;
     40                     p.Padding = new Padding(10);
     41 
     42                     HZH_Controls.Controls.UCTextBoxEx txt = new Controls.UCTextBoxEx();
     43                     txt.Dock = DockStyle.Fill;
     44                     txt.IsShowKeyboard = true;
     45                     txt.IsShowClearBtn = true;
     46                     txt.Name = "txt_" + i;
     47                     txt.TabIndex = i;
     48                     if (inTypes != null && inTypes.ContainsKey(inPutLabels[i]))
     49                     {
     50                         txt.InputType = inTypes[inPutLabels[i]];
     51                         if (txt.InputType == TextInputType.Regex && regexs != null && regexs.ContainsKey(inPutLabels[i]))
     52                             txt.RegexPattern = regexs[inPutLabels[i]];
     53                     }
     54                     if (keyBoards != null && keyBoards.ContainsKey(inPutLabels[i]))
     55                         txt.KeyBoardType = keyBoards[inPutLabels[i]];
     56                     if (mastInputs != null && mastInputs.Contains(inPutLabels[i]))
     57                     {
     58                         m_mastInputs[i] = inPutLabels[i];
     59                     }
     60                     if (defaultValues != null && defaultValues.ContainsKey(inPutLabels[i]))
     61                         txt.InputText = defaultValues[inPutLabels[i]];
     62                     p.Controls.Add(txt);
     63 
     64                     Label lbl = new Label();
     65                     lbl.Text = inPutLabels[i];
     66                     lbl.Padding = new System.Windows.Forms.Padding(0, 0, 5, 0);
     67                     lbl.TextAlign = ContentAlignment.MiddleRight;
     68                     lbl.AutoSize = false;
     69                     lbl.Width = 120;
     70                     lbl.Dock = DockStyle.Left;
     71                     lbl.Font = new System.Drawing.Font("微软雅黑", 12);
     72                     p.Controls.Add(lbl);
     73 
     74                     Label lblT = new Label();
     75                     if (mastInputs != null && mastInputs.Contains(inPutLabels[i]))
     76                     {
     77                         lblT.Text = "*";
     78                     }
     79                     else
     80                     {
     81                         lblT.Text = "";
     82                     }
     83                     lblT.AutoSize = false;
     84                     lblT.TextAlign = ContentAlignment.MiddleLeft;
     85                     lblT.Width = 25;
     86                     lblT.Dock = DockStyle.Right;
     87                     lblT.Font = new System.Drawing.Font("微软雅黑", 12);
     88                     lblT.ForeColor = Color.Red;
     89                     p.Controls.Add(lblT);
     90                     this.panel3.Controls.Add(p);
     91                     this.ActiveControl = txt;
     92                 }
     93 
     94                 this.Height = 124 + inPutLabels.Length * 62;
     95             }
     96             finally
     97             {
     98                 HZH_Controls.ControlHelper.FreezeControl(this, false);
     99             }
    100         }
    101         #endregion

    重写DoEnter函数

     1 protected override void DoEnter()
     2         {
     3             for (int i = 0; i < Values.Length; i++)
     4             {
     5                 var cs = this.panel3.Controls.Find("txt_" + i, true);
     6                 if (cs.Length > 0)
     7                 {
     8                     var txt = cs[0] as HZH_Controls.Controls.UCTextBoxEx;
     9                     Values[i] = txt.InputText;
    10                     if (m_mastInputs.ContainsKey(i) && string.IsNullOrWhiteSpace(txt.InputText))
    11                     {
    12                         HZH_Controls.Forms.FrmTips.ShowTipsInfo(this, "[" + m_mastInputs[i] + "]必须输入。");
    13                         return;
    14                     }
    15                 }
    16             }
    17             base.DoEnter();
    18         }

    完整代码如下

      1 // 版权所有  黄正辉  交流群:568015492   QQ:623128629
      2 // 文件名称:FrmInputs.cs
      3 // 创建日期:2019-08-15 16:04:41
      4 // 功能描述:FrmInputs
      5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
      6 using System;
      7 using System.Collections.Generic;
      8 using System.ComponentModel;
      9 using System.Data;
     10 using System.Drawing;
     11 using System.Linq;
     12 using System.Text;
     13 using System.Windows.Forms;
     14 
     15 namespace HZH_Controls.Forms
     16 {
     17     public partial class FrmInputs : FrmWithOKCancel1
     18     {
     19         public string[] Values { get; private set; }
     20         private Dictionary<int, string> m_mastInputs = new Dictionary<int, string>();
     21         #region 构造函数
     22         /// <summary>
     23         /// 功能描述:构造函数
     24         /// 作  者:HZH
     25         /// 创建日期:2019-08-05 10:57:26
     26         /// 任务编号:POS
     27         /// </summary>
     28         /// <param name="strTitle">窗体标题</param>
     29         /// <param name="args">输入项名称</param>
     30         /// <param name="inTypes">输入项对应输入类型,key:输入项名称,如不设置默认不控制输入</param>
     31         /// <param name="regexs">输入项对应正则规则,当imTypes=Regex时有效,key:输入项名称,如不设置默认不控制输入</param>
     32         /// <param name="keyBoards">文本框键盘,key:输入项名称,如不设置默认英文键盘</param>
     33         /// <param name="mastInputs">必填输入项名称</param>
     34         /// <param name="defaultValues">输入项默认值,key:输入项名称</param>
     35         public FrmInputs(
     36             string strTitle,
     37             string[] inPutLabels,
     38             Dictionary<string, TextInputType> inTypes = null,
     39             Dictionary<string, string> regexs = null,
     40             Dictionary<string, HZH_Controls.Controls.KeyBoardType> keyBoards = null,
     41             List<string> mastInputs = null,
     42             Dictionary<string, string> defaultValues = null)
     43         {
     44             InitializeComponent();
     45             this.Title = strTitle;
     46             if (inPutLabels.Length <= 0)
     47             {
     48                 throw new Exception("输入数量不能为空");
     49             }
     50             try
     51             {
     52                 Values = new string[inPutLabels.Length];
     53                 HZH_Controls.ControlHelper.FreezeControl(this, true);
     54 
     55                 for (int i = inPutLabels.Length - 1; i >= 0; i--)
     56                 {
     57                     Panel p = new Panel();
     58                     p.Dock = DockStyle.Top;
     59                     p.Height = 62;
     60                     p.Padding = new Padding(10);
     61 
     62                     HZH_Controls.Controls.UCTextBoxEx txt = new Controls.UCTextBoxEx();
     63                     txt.Dock = DockStyle.Fill;
     64                     txt.IsShowKeyboard = true;
     65                     txt.IsShowClearBtn = true;
     66                     txt.Name = "txt_" + i;
     67                     txt.TabIndex = i;
     68                     if (inTypes != null && inTypes.ContainsKey(inPutLabels[i]))
     69                     {
     70                         txt.InputType = inTypes[inPutLabels[i]];
     71                         if (txt.InputType == TextInputType.Regex && regexs != null && regexs.ContainsKey(inPutLabels[i]))
     72                             txt.RegexPattern = regexs[inPutLabels[i]];
     73                     }
     74                     if (keyBoards != null && keyBoards.ContainsKey(inPutLabels[i]))
     75                         txt.KeyBoardType = keyBoards[inPutLabels[i]];
     76                     if (mastInputs != null && mastInputs.Contains(inPutLabels[i]))
     77                     {
     78                         m_mastInputs[i] = inPutLabels[i];
     79                     }
     80                     if (defaultValues != null && defaultValues.ContainsKey(inPutLabels[i]))
     81                         txt.InputText = defaultValues[inPutLabels[i]];
     82                     p.Controls.Add(txt);
     83 
     84                     Label lbl = new Label();
     85                     lbl.Text = inPutLabels[i];
     86                     lbl.Padding = new System.Windows.Forms.Padding(0, 0, 5, 0);
     87                     lbl.TextAlign = ContentAlignment.MiddleRight;
     88                     lbl.AutoSize = false;
     89                     lbl.Width = 120;
     90                     lbl.Dock = DockStyle.Left;
     91                     lbl.Font = new System.Drawing.Font("微软雅黑", 12);
     92                     p.Controls.Add(lbl);
     93 
     94                     Label lblT = new Label();
     95                     if (mastInputs != null && mastInputs.Contains(inPutLabels[i]))
     96                     {
     97                         lblT.Text = "*";
     98                     }
     99                     else
    100                     {
    101                         lblT.Text = "";
    102                     }
    103                     lblT.AutoSize = false;
    104                     lblT.TextAlign = ContentAlignment.MiddleLeft;
    105                     lblT.Width = 25;
    106                     lblT.Dock = DockStyle.Right;
    107                     lblT.Font = new System.Drawing.Font("微软雅黑", 12);
    108                     lblT.ForeColor = Color.Red;
    109                     p.Controls.Add(lblT);
    110                     this.panel3.Controls.Add(p);
    111                     this.ActiveControl = txt;
    112                 }
    113 
    114                 this.Height = 124 + inPutLabels.Length * 62;
    115             }
    116             finally
    117             {
    118                 HZH_Controls.ControlHelper.FreezeControl(this, false);
    119             }
    120         }
    121         #endregion
    122 
    123         protected override void DoEnter()
    124         {
    125             for (int i = 0; i < Values.Length; i++)
    126             {
    127                 var cs = this.panel3.Controls.Find("txt_" + i, true);
    128                 if (cs.Length > 0)
    129                 {
    130                     var txt = cs[0] as HZH_Controls.Controls.UCTextBoxEx;
    131                     Values[i] = txt.InputText;
    132                     if (m_mastInputs.ContainsKey(i) && string.IsNullOrWhiteSpace(txt.InputText))
    133                     {
    134                         HZH_Controls.Forms.FrmTips.ShowTipsInfo(this, "[" + m_mastInputs[i] + "]必须输入。");
    135                         return;
    136                     }
    137                 }
    138             }
    139             base.DoEnter();
    140         }
    141     }
    142 }
    View Code
     1 namespace HZH_Controls.Forms
     2 {
     3     partial class FrmInputs
     4     {
     5         /// <summary>
     6         /// Required designer variable.
     7         /// </summary>
     8         private System.ComponentModel.IContainer components = null;
     9 
    10         /// <summary>
    11         /// Clean up any resources being used.
    12         /// </summary>
    13         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    14         protected override void Dispose(bool disposing)
    15         {
    16             if (disposing && (components != null))
    17             {
    18                 components.Dispose();
    19             }
    20             base.Dispose(disposing);
    21         }
    22 
    23         #region Windows Form Designer generated code
    24 
    25         /// <summary>
    26         /// Required method for Designer support - do not modify
    27         /// the contents of this method with the code editor.
    28         /// </summary>
    29         private void InitializeComponent()
    30         {
    31             this.SuspendLayout();
    32             // 
    33             // FrmInputs
    34             // 
    35             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
    36             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    37             this.ClientSize = new System.Drawing.Size(427, 310);
    38             this.Name = "FrmInputs";
    39             this.Text = "FrmInputs";
    40             this.ResumeLayout(false);
    41 
    42         }
    43 
    44         #endregion
    45 
    46 
    47     }
    48 }
    View Code

    用处及效果

    用处:当需要输入多个文本时可用

    效果:

    调用示例

    1   FrmInputs frm = new FrmInputs("动态多输入窗体测试",
    2                 new string[] { "姓名", "电话", "身份证号", "住址" },
    3                 new Dictionary<string, HZH_Controls.TextInputType>() { { "电话", HZH_Controls.TextInputType.Regex }, { "身份证号", HZH_Controls.TextInputType.Regex } },
    4                 new Dictionary<string, string>() { { "电话", "^1\d{10}$" }, { "身份证号", "^\d{18}$" } },
    5                 new Dictionary<string, KeyBoardType>() { { "电话", KeyBoardType.UCKeyBorderNum }, { "身份证号", KeyBoardType.UCKeyBorderNum } },
    6                 new List<string>() { "姓名", "电话", "身份证号" });
    7             frm.ShowDialog(this);

    最后的话

    如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星 星吧

  • 相关阅读:
    微信公众平台开发(53)砸金蛋
    微信公众平台高级功能
    微信5.0安卓内测版下载
    微信公众平台2013.08.05更新说明
    淘宝微信互相屏蔽影响了谁
    WAP网页输入框的默认键盘类型控制
    如何通过微信创业赚钱
    腾讯风铃
    腾讯推出微信企业服务平台风铃
    一键生成HTML4和WAP站
  • 原文地址:https://www.cnblogs.com/bfyx/p/11364255.html
Copyright © 2011-2022 走看看