Как заставить MaskedTextBox принимать только значение HEX? - PullRequest
4 голосов
/ 01 апреля 2010

Мне нужен элемент управления, который принимает значение HEX только в следующем формате:

xxxx-xxxx , а x находится в 0-9, a-f, A-F

Поэтому я добавляю MaskedTextBox и пытаюсь отредактировать его Mask свойство, но не удалось.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2010

Вы не можете сделать это из коробки с MaskedTextBox. Если вы посмотрите на разрешенные маскирующие элементы, подробно описанные в документации по Mask свойству , вы увидите, что нет способа обеспечить принудительный ввод только шестнадцатеричного ввода.

Вы можете использовать NumericUpDown и установить для его свойства Hexadecimal значение true.

2 голосов
/ 01 апреля 2010

Новый класс необходим, чтобы проверить, является ли введенное значение допустимым, и тип класса должен быть установлен как свойство ValiedatingType MaskedTextBox1, как показано ниже:

public class HexValidator
{
. . .

// the following function is needed to used to verify the input
public static HexValidator Parse(string s)
{
 // remove any spaces
            s = s.Replace(" ", "");

            string[] strParts = s.Split('-');
            int nValue;

            foreach (string part in strParts)
            {
                bool result = int.TryParse(part, System.Globalization.NumberStyles.AllowHexSpecifier, null, out nValue);
                if (false == result)
                    throw new ArgumentException(string.Format("The provided string {0} is not a valid subnet ID.", s));
            }

            return new SubnetID(strParts[0], strParts[1]);
}
}

/// set as following to associate them
maskedTextBox1.ValidatingType = typeof(HexValidator);

// in  the validationcomplete event, you could judge if the input is valid
private void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
        {
            if (e.IsValidInput)
            {
                //AppendLog("Type validation succeeded.  Message: " + e.Message);                
            }
            else
            {
                toolTip1.Show(e.Message, maskedTextBox1, maskedTextBox1.Location, 5000);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...