最近做的一个web版的IP地址控件。本以为网上肯定有的,找了半天没找到。WINDOWS版的倒有,于是按开发WINDOWS版的方法用C#+JAVASCRIPT写了一个用以WEB上的,希望找到这里来的懒人可以用上。web版有个最大的缺陷就是在XP界面下显示比较不美观。
IpBox.ascx所有代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="IpBox.ascx.cs" Inherits="IpBox" %>
<script language="javascript">
function TextBox_Paste(obj)
{
Box = new Array();
Box[0] = document.getElementById("<%=BoxName %>_TextBox1");
Box[1] = document.getElementById("<%=BoxName %>_TextBox2");
Box[2] = document.getElementById("<%=BoxName %>_TextBox3");
Box[3] = document.getElementById("<%=BoxName %>_TextBox4");
var tempText = clipboardData.getData("text");
var tempArr = tempText.split(".");
var i;
for(i = 0; i< 4; i++)
{
if(Box[i] == obj)
break;
}
for(var j = 0; j< tempArr.length; j++)
{
if(i<4)
{
Box[i].value = tempArr[j];
i++;
}
}
}
function TextBox_KeyDown(obj)
{
var NextBox;
var PreBox;
if(obj.id == "<%=BoxName %>_TextBox1")
NextBox = document.getElementById("<%=BoxName %>_TextBox2");
else if(obj.id == "<%=BoxName %>_TextBox2")
{
PreBox = document.getElementById("<%=BoxName %>_TextBox1");
NextBox = document.getElementById("<%=BoxName %>_TextBox3");
}
else if(obj.id == "<%=BoxName %>_TextBox3")
{
PreBox = document.getElementById("<%=BoxName %>_TextBox2");
NextBox = document.getElementById("<%=BoxName %>_TextBox4");
}
else
PreBox = document.getElementById("<%=BoxName %>_TextBox3");
if(PreBox)
{
if(event.keyCode == 8 && obj.value.length == 0)
{
PreBox.focus();
PreBox.select();
}
}
if(NextBox)
{
if(event.keyCode == 32 || event.keyCode == 110)
{
obj.value = obj.value.replace(".","");
obj.value = obj.value.replace(" ","");
if(obj.value == "")
{
alert("IP地址格式不正确");
obj.focus();
obj.select();
}
else
{
NextBox.focus();
NextBox.select();
}
}
}
if(IsIPValue(obj.value) == false)
{
alert("IP地址格式不正确");
obj.focus();
obj.select();
}
}
//校验IP地址
function IsIPValue(strTemp)
{
var r,re;
re = /\d*/i;
r = strTemp.match(re);
if(r!=strTemp)
return false;
if (strTemp< 0 || strTemp>255)
return false;
return true;
}
</script>
<asp:Panel ID="Panel1" runat="server" BackColor="Window" BorderStyle="Inset" BorderWidth="2px"
Height="18px" Width="118px">
<asp:TextBox ID="TextBox1" runat="server" BorderStyle="None" Height="15px" MaxLength="3"
Width="22px" style="text-align:center"></asp:TextBox>.<asp:TextBox ID="TextBox2" runat="server" BorderStyle="None"
Height="15px" MaxLength="3" Width="22px" style="text-align:center"></asp:TextBox>.<asp:TextBox ID="TextBox3"
runat="server" BorderStyle="None" Height="15px" MaxLength="3" Width="22px" style="text-align:center"></asp:TextBox>.<asp:TextBox
ID="TextBox4" runat="server" BorderStyle="None" Height="15px" MaxLength="3" Width="22px" style="text-align:center"></asp:TextBox></asp:Panel>
IpBox.ascx.cs所有代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;
public partial class IpBox : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Attributes.Add("onkeyup", "TextBox_KeyDown(this)");
TextBox2.Attributes.Add("onkeyup", "TextBox_KeyDown(this)");
TextBox3.Attributes.Add("onkeyup", "TextBox_KeyDown(this)");
TextBox4.Attributes.Add("onkeyup", "TextBox_KeyDown(this)");
TextBox1.Attributes.Add("onpaste", "TextBox_Paste(this)");
TextBox2.Attributes.Add("onpaste", "TextBox_Paste(this)");
TextBox3.Attributes.Add("onpaste", "TextBox_Paste(this)");
TextBox4.Attributes.Add("onpaste", "TextBox_Paste(this)");
}
private string _boxName = "UcIpBox";
private string _text = "";
public string BoxName
{
get { return _boxName; }
set { _boxName = value; }
}
public string Text
{
get
{
if (TextBox1.Text == "" || TextBox2.Text == "" || TextBox3.Text == "" || TextBox4.Text == "")
{
_text = "";
return _text;
}
else
{
_text = Convert.ToInt32(TextBox1.Text).ToString() + "." + Convert.ToInt32(TextBox2.Text).ToString() + "." + Convert.ToInt32(TextBox3.Text).ToString() + "." + Convert.ToInt32(TextBox4.Text).ToString();
return _text;
}
}
set
{
if (value.ToString() != "")
{
string pattern = @"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$";
//IP地址的格式判断
if (!Regex.IsMatch(value, pattern))
{
_text = "";
throw new Exception("IP地址的格式不正确!");
}
else
{
string[] ipnum = value.Split('.');
TextBox1.Text = ipnum[0];
TextBox2.Text = ipnum[1];
TextBox3.Text = ipnum[2];
TextBox4.Text = ipnum[3];
}
}
else
{
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
TextBox4.Text = "";
}
_text = value;
}
}
}
使用方法:
Test.aspx
<%@ Register src="~/IpBox.ascx" TagPrefix="uc" TagName="IpBox" %>
<uc:IpBox ID="UcIpBox" runat="server" />
Test.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
UcIpBox.BoxName = "UcIpBox";//控件的名称可任意。
UcIpBox.Text = "192.168.0.1";//设置IP值
Response.Write(UcIpBox.Text);//获取IP值
}