228 lines
3.1 KiB
C#
228 lines
3.1 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Globalization;
|
|
using System.Windows.Forms;
|
|
using DevExpress.XtraEditors;
|
|
|
|
namespace Server.Helper;
|
|
|
|
public class WordTextBox : TextEdit
|
|
{
|
|
public enum WordType
|
|
{
|
|
DWORD,
|
|
QWORD
|
|
}
|
|
|
|
private bool isHexNumber;
|
|
|
|
private WordType type;
|
|
|
|
private IContainer components;
|
|
|
|
public int MaxLength
|
|
{
|
|
get
|
|
{
|
|
return base.Properties.MaxLength;
|
|
}
|
|
set
|
|
{
|
|
base.Properties.MaxLength = value;
|
|
}
|
|
}
|
|
|
|
public bool IsHexNumber
|
|
{
|
|
get
|
|
{
|
|
return isHexNumber;
|
|
}
|
|
set
|
|
{
|
|
if (isHexNumber == value)
|
|
{
|
|
return;
|
|
}
|
|
if (value)
|
|
{
|
|
if (Type == WordType.DWORD)
|
|
{
|
|
Text = UIntValue.ToString("x");
|
|
}
|
|
else
|
|
{
|
|
Text = ULongValue.ToString("x");
|
|
}
|
|
}
|
|
else if (Type == WordType.DWORD)
|
|
{
|
|
Text = UIntValue.ToString();
|
|
}
|
|
else
|
|
{
|
|
Text = ULongValue.ToString();
|
|
}
|
|
isHexNumber = value;
|
|
UpdateMaxLength();
|
|
}
|
|
}
|
|
|
|
public WordType Type
|
|
{
|
|
get
|
|
{
|
|
return type;
|
|
}
|
|
set
|
|
{
|
|
if (type != value)
|
|
{
|
|
type = value;
|
|
UpdateMaxLength();
|
|
}
|
|
}
|
|
}
|
|
|
|
public uint UIntValue
|
|
{
|
|
get
|
|
{
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(Text))
|
|
{
|
|
return 0u;
|
|
}
|
|
if (IsHexNumber)
|
|
{
|
|
return uint.Parse(Text, NumberStyles.HexNumber);
|
|
}
|
|
return uint.Parse(Text);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return uint.MaxValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
public ulong ULongValue
|
|
{
|
|
get
|
|
{
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(Text))
|
|
{
|
|
return 0uL;
|
|
}
|
|
if (IsHexNumber)
|
|
{
|
|
return ulong.Parse(Text, NumberStyles.HexNumber);
|
|
}
|
|
return ulong.Parse(Text);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return ulong.MaxValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool IsConversionValid()
|
|
{
|
|
if (string.IsNullOrEmpty(Text))
|
|
{
|
|
return true;
|
|
}
|
|
if (!IsHexNumber)
|
|
{
|
|
return ConvertToHex();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public WordTextBox()
|
|
{
|
|
InitializeComponent();
|
|
MaxLength = 8;
|
|
}
|
|
|
|
protected override void OnKeyPress(KeyPressEventArgs e)
|
|
{
|
|
base.OnKeyPress(e);
|
|
e.Handled = !IsValidChar(e.KeyChar);
|
|
}
|
|
|
|
private bool IsValidChar(char ch)
|
|
{
|
|
if (!char.IsControl(ch) && !char.IsDigit(ch))
|
|
{
|
|
if (IsHexNumber && char.IsLetter(ch))
|
|
{
|
|
return char.ToLower(ch) <= 'f';
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private void UpdateMaxLength()
|
|
{
|
|
if (Type == WordType.DWORD)
|
|
{
|
|
if (IsHexNumber)
|
|
{
|
|
MaxLength = 8;
|
|
}
|
|
else
|
|
{
|
|
MaxLength = 10;
|
|
}
|
|
}
|
|
else if (IsHexNumber)
|
|
{
|
|
MaxLength = 16;
|
|
}
|
|
else
|
|
{
|
|
MaxLength = 20;
|
|
}
|
|
}
|
|
|
|
private bool ConvertToHex()
|
|
{
|
|
try
|
|
{
|
|
if (Type == WordType.DWORD)
|
|
{
|
|
uint.Parse(Text);
|
|
}
|
|
else
|
|
{
|
|
ulong.Parse(Text);
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing && components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.components = new System.ComponentModel.Container();
|
|
}
|
|
}
|