您的位置:首页 > 产品设计 > UI/UE

贡献个Winform自定义控件,信用卡、银行卡输入控件;每4个字符分隔显示。其他UI框架可以参考。

2012-04-20 12:29 465 查看
经常在网银交易的时候需要输入卡号,看到输入的卡号都被每4个字符分隔显示,这样很方便操作者核对。最近在弄WinForm的项目,赶紧也实现一个。要的快来!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BarCodeCommon
{
/// <summary>
/// 信用卡、银行卡,卡号输入控件;也可以用来输入手机号,4个字符分隔一下。
/// </summary>
public partial class BankCardNoInputTextBox : TextBox
{
public override string Text
{
get
{
return base.Text.Replace(" ","");
}
set
{
base.Text = value;
}
}

public BankCardNoInputTextBox()
{
InitializeComponent();
Font = new Font("幼圆", 10F, FontStyle.Bold);
ForeColor = Color.DarkBlue;
}

protected override void OnTextChanged(EventArgs e)
{
if (SelectionStart > 4)
{
string result = string.Empty;
var tmpTxt = this.Text.Replace(" ", "").ToArray();
int cnt = Convert.ToInt32(Math.Ceiling((double)tmpTxt.Length / 4));
for (int i = 0; i < cnt; i++)
{
var fourChar = tmpTxt.Skip(i * 4).Take(4);
result += string.Join("", fourChar) + " ";
}
Text = result;
SelectionStart = result.Length-1;
}
}

protected override void OnKeyPress(KeyPressEventArgs e)
{
char c = e.KeyChar;
//如果是ctrl + c 、ctrl + v、ctrl + x
if (c.Equals((char)3) || c.Equals((char)22) || c.Equals((char)24))
{
return;
}
//判断是否是数字
bool blA = !(c >= 48 && c <= 57) && c != 8 && c != 43 && c != 45 && c != 46;
//判断是否超过小数点的位数,判断是否会出现数据类型冲突
bool blC = (c == 43 || c == 45) && (this.Text.IndexOf("+") >= 0 || this.Text.IndexOf("-") >= 0)
&& this.SelectedText != "+" && this.SelectedText != "-";
if (blA || blC)
{
e.Handled = true;
return;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐