C#创建用户控件:IPv4地址输入框
2012-07-31 10:30
162 查看
对网上的例子做了代码优化。源地址链接:http://blog.sina.com.cn/s/blog_57b5da120100ls8q.html
开发语言:C#
控件名称:IPv4地址输入框
控件样式:
控件属性:
Text:获取或设置string类型的IP地址
Value:获取或设置IPAddress类型的IP地址
Type:获取IP地址所属分类。分A、B、C、D、E 5大类。
BorderStyle:获取或设置控件的边框样式。
源代码:UserControl_IPv4TextBox.cs
开发语言:C#
控件名称:IPv4地址输入框
控件样式:
控件属性:
Text:获取或设置string类型的IP地址
Value:获取或设置IPAddress类型的IP地址
Type:获取IP地址所属分类。分A、B、C、D、E 5大类。
BorderStyle:获取或设置控件的边框样式。
源代码:UserControl_IPv4TextBox.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; using System.Text.RegularExpressions; using System.Net; namespace IPv4TextBox { public enum IPType : byte { A, B, C, D, E }; public class UserControl_IPv4TextBox : UserControl { private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.TextBox textBox3; private System.Windows.Forms.TextBox textBox4; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region 组件设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { // 通过注册表获取系统默认字体 string DefaultFontFaceName = (string)Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize", "GUIFont.Facename", "SimSun"); this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.textBox3 = new System.Windows.Forms.TextBox(); this.textBox4 = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(0, 3); this.textBox1.MaxLength = 3; this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(37, 21); this.textBox1.TabIndex = 0; this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.IPv4TextBox_KeyPress); // // textBox2 // this.textBox2.Location = new System.Drawing.Point(57, 3); this.textBox2.MaxLength = 3; this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(37, 21); this.textBox2.TabIndex = 1; this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.textBox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.IPv4TextBox_KeyPress); // // textBox3 // this.textBox3.Location = new System.Drawing.Point(114, 3); this.textBox3.MaxLength = 3; this.textBox3.Name = "textBox3"; this.textBox3.Size = new System.Drawing.Size(37, 21); this.textBox3.TabIndex = 2; this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.textBox3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.IPv4TextBox_KeyPress); // // textBox4 // this.textBox4.Location = new System.Drawing.Point(171, 3); this.textBox4.MaxLength = 3; this.textBox4.Name = "textBox4"; this.textBox4.Size = new System.Drawing.Size(37, 21); this.textBox4.TabIndex = 3; this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.textBox4.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.IPv4TextBox_KeyPress); // // label1 // this.label1.AutoSize = true; this.label1.Font = new System.Drawing.Font(DefaultFontFaceName, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label1.Location = new System.Drawing.Point(39, 5); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(16, 16); this.label1.TabIndex = 4; this.label1.Text = "."; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // label2 // this.label2.AutoSize = true; this.label2.Font = new System.Drawing.Font(DefaultFontFaceName, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label2.Location = new System.Drawing.Point(96, 5); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(16, 16); this.label2.TabIndex = 5; this.label2.Text = "."; this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // label3 // this.label3.AutoSize = true; this.label3.Font = new System.Drawing.Font(DefaultFontFaceName, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label3.Location = new System.Drawing.Point(153, 5); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(16, 16); this.label3.TabIndex = 6; this.label3.Text = "."; this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // UserControl_IPv4TextBox // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.textBox4); this.Controls.Add(this.textBox3); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); this.Name = "UserControl_IPv4TextBox"; this.Size = new System.Drawing.Size(212, 30); this.ResumeLayout(false); this.PerformLayout(); } #endregion public UserControl_IPv4TextBox() { InitializeComponent(); } private void IPv4TextBox_KeyPress(object sender, KeyPressEventArgs e) { char KeyChar = e.KeyChar; int TextLength = ((TextBox)sender).TextLength; if (KeyChar == '.' || KeyChar == '。' || KeyChar == ' ') { if ((((TextBox)sender).SelectedText.Length == 0) && (TextLength > 0) && (((TextBox)sender) != textBox4)) { // 进入下一个文本框 SendKeys.Send("{Tab}"); } e.Handled = true; } if (Regex.Match(KeyChar.ToString(), "[0-9]").Success) { if (TextLength == 2) { if (int.Parse(((TextBox)sender).Text + e.KeyChar.ToString()) > 255) { e.Handled = true; } } else if (TextLength == 0) { if (KeyChar == '0') { e.Handled = true; } } } else { // 回删操作 if (KeyChar == '\b') { if (TextLength == 0) { if (((TextBox)sender) != textBox1) { // 回退到上一个文本框 Shift+Tab SendKeys.Send("+{TAB}{End}"); } } } else { e.Handled = true; } } } /// <summary> /// string类型的IP地址 /// </summary> override public string Text { get { return this.Value.ToString(); } set { IPAddress address; if (IPAddress.TryParse(value, out address)) { byte[] bytes = address.GetAddressBytes(); for (int i = 1; i <= 4; i++) { this.Controls["textBox" + i.ToString()].Text = bytes[i - 1].ToString("D"); } } } } /// <summary> /// IP地址 /// </summary> public IPAddress Value { get { IPAddress address; string ipString = textBox1.Text + "." + textBox2.Text + "." + textBox3.Text + "." + textBox4.Text; if (IPAddress.TryParse(ipString, out address)) { return address; } else { return new IPAddress(0); } } set { byte[] bytes = value.GetAddressBytes(); for (int i = 1; i <= 4; i++) { this.Controls["textBox" + i.ToString()].Text = bytes[i - 1].ToString("D"); } } } /// <summary> /// IP地址分类 /// </summary> public IPType Type { get { byte[] bytes = this.Value.GetAddressBytes(); int FirstByte = bytes[0]; if (FirstByte < 128) { return IPType.A; } else if (FirstByte < 192) { return IPType.B; } else if (FirstByte < 224) { return IPType.C; } else if (FirstByte < 240) { return IPType.D; } else { return IPType.E; // 保留做研究用 } } } /// <summary> /// 控件的边框样式 /// </summary> new public BorderStyle BorderStyle { get { return this.textBox1.BorderStyle; } set { for (int i = 1; i <= 4; i++) { ((TextBox)this.Controls["textBox" + i.ToString()]).BorderStyle = value; } } } } }
相关文章推荐
- C#创建用户控件:IPv4地址输入框
- C#创建用户控件 - IPv4地址输入框
- C#.net中web工程中创建用户控件和被调用的方法
- C#用户控件的创建
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题
- [译]使用C#的用户控件创建ActiveX
- c#创建透明背景用户控件
- C#.net中web工程中创建用户控件和被调用的方法
- 使用C#的用户控件创建ActiveX
- C#用户控件的创建
- c#第三方控件地址
- C#用户控件之温度计设计
- C#c# 从不是创建控件 的线程访问它。
- [原译]如何创建WPF用户控件&在WPF项目中使用
- 牛腩购物9 用户表设计/动软生成器/金钱字段decimal(18, 2)/ 注册的时候的前台js判断/后台代码判断/正则表达式软件/RegexBuddy/设置数据库字段的唯一性约束/如何获取控件在前台html的id值/如何将C#的后台正则换成js的正则
- 使用c#创建windows本地用户帐号
- 【C#】遍历本机IPV4地址
- C#动态创建控件时注册Name属性
- Windows 控件限制用户的基本法门(C#.NET 篇)
- c#中Invoke使用方法(线程间操作无效: 从不是创建控件的线程访问它。那么创建它的线程是哪个线程?)