MAC地址文本框和类

分享于 

8分钟阅读

Web开发

  繁體

Sample Image - matb.jpg

介绍

任何配置虚拟网络的人都需要可以编辑的MAC地址字段。 由于屏幕文本框是原始的of,我决定创建一个我自己的MAC地址文本框。 这是一个允许用户输入MAC地址的文本框,以及一个用于处理文本框的类。

关于代码

mawnkay的文章非常类似于发布的文章,因为他努力创建了一个简单易用的IP文本框,启发了我。 ,edit是六个编辑框和五个 static':'文本框。

因为只是给出一个文本框,只需要返回一个字符串,我就可以通过编程方式设置和保存地址。 代码详细信息如下。

开发者

使用文本框

只需将MACToolsmatbmatbbinrelease从目录拖放到 Visual Studio 2005 ( 我把它放在"中,所有 Windows 窗体"制表符) 和 Visual Studio 都会自动将它添加到你的控件列表。 你还可以将项目添加到现有解决方案中。 然后,在重新生成解决方案时,它将自动在你的工具箱中的顶部( 上方上方"所有 Windows 窗体") 中使用。

接下来,像使用设计编辑器中的任何标准 Windows 窗体控件一样,将它的拖到你的对话框中。 将控件拖动到对话框中时,它将自动使它的大小正确。 此框不支持调整大小。

重写的属性包括:

  • Text
  • BackColor
  • ForeColor

可以在设计器属性窗口中编辑 BackColorForeColor,以对对话框中的其他控件进行 MATCH。

使用MAC地址类( MacAddr )

类由六个字节组成,每个字节代表文本框的六个框。 只需要使用 MacAddr 类的Address 属性和属性的TextBoxText 就可以了。 例如:

matb macTextBox = new matb();
MacAddr macVariable = new MacAddr();// saving what the user typed into the text boxmacVariable.Address = macTextBox.Text;// loading saved address into the text box for user to seemacTextBox.Text = macVariable.Address;

你可以使用每个字节的属性分别编辑MAC地址的字节:

macVariable.FirstByte = 0x1a;
macVariable.SecondByte = 0x2b;
macVariable.ThirdByte = 0x3c;
macVariable.FourthByte = 0x4d;
macVariable.FifthByte = 0x5e;
macVariable.SixthByte = 0x6f;

下面是关于场景背后发生的事情的小代码演练。 下面是 private 变量,每个变量代表 TextBox 控件中的相应框:

// The bytes of the MAC addressprivatebyte firstByte;privatebyte secondByte;privatebyte thirdByte;privatebyte fourthByte;privatebyte fifthByte;privatebyte sixthByte;

现在,我必须设计一个方法来将字符串转换为字节,反之亦然。 最困难的部分是从字符串中取出两个字母,比如" 1a",并将它的转换为一个字节( 从逻辑上讲就是这样)。 下面是类用来在两个类之间转换的属性。

///<summary>/// Gets or sets the string value of the entire Mac Address. /// Note: includes colon seperators, e.g."1a:2b:3c:4d:5e:6f"///</summary>publicstring Address
{ 
 get {
 string temp;
 temp = string.Format("{0:x2}:{1:x2}:{2:x2}:{3:x2}:{4:x2}:{5:x2}", 
 firstByte, secondByte, thirdByte, 
 fourthByte, fifthByte, sixthByte);
 return temp;
 } 
 set {
 string[] temp;
 byte[] byTemp;
 char[] sep = new char[1];
 sep[0] = ':'; 
 temp = value.Split(sep, 6);
 //format A-F as 10-15 decimal, FormatByte() explained later byTemp = FormatByte(temp);
 firstByte = byTemp[0];
 secondByte = byTemp[1];
 thirdByte = byTemp[2];
 fourthByte = byTemp[3];
 fifthByte = byTemp[4];
 sixthByte = byTemp[5]; 
 }
}

行:

byTemp = FormatByte(temp);

实际的工作。 它需要一个 字符串 array 并将它的转换为 字节 array。这不是最好的方法,但是它可以。

///<summary>/// Converts each part of sTemp between A-F/// and converts to decimal 10-15, respectively///</summary>///<paramname="sTemp"></param>///<returns></returns></FONT>private byte[] FormatByte(string[] sTemp)
{ 
 byte[] sRetValue = new byte[6];
 char[] cAtoF = { 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f' };
 char[] c0to9 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
 // iterate through each bytefor (int i = 0; i <6; i++)
 {
 // iterate through both cAtoF and c0to9for (int j = 0; j <12; j++)
 {
 // shift ASCII numbers down to decimal// equivilent ( 0 (48) = 0, 1 (49) = 1.. . )if (j <10)
 sTemp[i] = newstring(sTemp[i].Replace(c0to9[j], 
 (char)((int)c0to9[j] - 48)).ToCharArray());
 // shift ASCII uppercase A-F down to hex equivilant// decimal value ( A (65) = 10 = 0xA )if( j <6 )
 sTemp[i] = newstring(sTemp[i].Replace(cAtoF[j], 
 (char)((int)cAtoF[j] - 55)).ToCharArray());
 // shift ASCII lowercase a-f down to hex// equivilant decimal value ( A (97) = 10 = 0xA )else sTemp[i] = newstring(sTemp[i].Replace(cAtoF[j], 
 (char)((int)cAtoF[j] - 87)).ToCharArray());
 }
 }
 // go through the byte array and assign// it the appropriate shifted string pairfor (int i = 0; i <6; i++)
 {
 sRetValue[i] = (byte)(sTemp[i][0] <<4 | sTemp[i][1]);
 }
 return sRetValue;
}

这几乎是。 现在,如果你想保存MAC地址文本框的用户输入,你可以处理一个类。

源代码被包含,因这里如果有人进行了更好的方式,或者向代码中添加另一个部分。

最终用户

MAC地址文本框

只允许用户键入有效的十六进制字符,不区分大小写。 注意,这并不真正执行任何错误检查,因为它只允许用户输入一个有效的十六进制值。 当用户在每个框中键入两个十六进制值时,自动将焦点设置到下一个框中。 ':'还有'- 也移动到下一个框。 当五个部分失去焦点时,向左Pads零。

未来推荐

可能希望在用户键入框时强制每个字符都大写。 这里外,支持数据绑定可以能是一个好主意( MacAddr.Address 属性,以及 TextBox 控件的Text 属性)。

历史记录

  • 16/08/2006 17: 42 CST: 关于返回未编辑文本框上的":::::"字符串的Text 属性的固定 Bug。
  • 10/08/2006 12: 44 CST: 向文本框控件添加了 BackColorForeColor 属性。 包含了代码使用的一个小示例。
  • 07/06/2006 13: 41 CST: 以编程方式添加了用于处理文本框的MacAddr 类。
  • 21/05/2006 01: 07 CST: 当控件失去焦点时添加零填充编辑框。
  • 14/05/2006 17: 05 CST: 在将两个大写字母输入到框中时,固定的Bug 关于缺少的字符。 还添加了在初始实例中添加的默认零。

添加  mac  文本  TEX    BOX  
相关文章