Я создал настраиваемое текстовое поле с помощью библиотеки управления Windows Forms, в котором есть опции для Numeric Text Box
, Alpa Numeric Text Box
, Decimal
и т. Д. *
Я переопределил PreProcessMessage(ref Message msg)
Способ сделать это.
Вот мой пример фрагмента для Numeric Text Box
public override bool PreProcessMessage(ref Message msg)
{
int WM_KEYDOWN = 0x0100;
if (msg.Msg == WM_KEYDOWN)
{
Keys keys = (Keys)msg.WParam.ToInt32();
bool bNumbers = false;
switch (eType)
{
case enTextBoxTypes.Numeric:
bNumbers = ((keys >= Keys.D0 && keys <= Keys.D9) || (keys >= Keys.NumPad0 && keys <= Keys.NumPad9)) && ModifierKeys != Keys.Shift;
System.Diagnostics.Debug.Print(bNumbers.ToString());
if ((keys == Keys.OemMinus || keys == Keys.Subtract) && bAllowMinusSign && ModifierKeys != Keys.Shift)
{
bIsOEMMinus = (keys == Keys.OemMinus) | (keys == Keys.Subtract);
if ((this.Text.Length != this.SelectedText.Length || !bAllowMinusSign) && this.SelectionStart != 0)
bIsOEMMinus = false;
}
break;
}
bool bDel = keys == Keys.Delete;
bool bBack = keys == Keys.Back;
bool arrows = (keys == Keys.Up) | (keys == Keys.Down) | (keys == Keys.Left) | (keys == Keys.Right);
bool Enter = (keys == Keys.Enter);
bool ESC = (keys == Keys.Escape);
bool TAB = (keys == Keys.Tab);
bool Home = (keys == Keys.Home);
bool End = (keys == Keys.End);
if (bNumbers bBack | bDel | arrows | Home | End | bIsOEMMinus)
return false;
else if(TAB)
return base.PreProcessMessage(ref msg);
else
return true;
}
else
return base.PreProcessMessage(ref msg);
}
Теперь мне нужно реализовать unit
в текстовом поле, для этого я добавил новыйперечисление в TextBox type
т.е. Distance
.Поэтому, если я ввел десятичное число, а после этого, если я нажал клавишу k
, к значению текстового поля следует добавить Km
, например, если текстовое поле имеет текст 100
, а затемЯ нажал k
, тогда текст текстового поля должен быть 100Km
.
. Кроме того, мне нужно предоставить функциональность смены модуля клавишам Up Down
.
Так что если я нажимаюdown
введите текстовое поле с указанным выше значением, тогда значение текстового поля должно быть 100000m
.
Как мне это сделать?