に私は、Windowsがフォームコントロールライブラリ、およびそのNumeric Text Box
、Alpa Numeric Text Box
、Decimal
などのオプションを持って使用してカスタマイズされたテキストボックスを作成しました...カスタムWindowsコントロールライブラリのC#
私が行うには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);
}
のための私のサンプルスニペットである今、私は私がTextBox type
すなわちDistance
に新しい列挙を追加しました。このためにテキストボックス でunit
を実装する必要があります。 k
し、テキストボックスの は、だから私は、小数を入力した場合は、テキストボックスのテキストが100
であれば、その後、私は、テキストボックスの値は、例えばKm
を付加しなければならないk
キーを押した場合は、その後、私が押されましたテキストは100Km
である必要があります。
また、ユニット変更機能をUp Down
キーに提供する必要があります。
上記の値を持つテキストボックスのdown
キーを押すと、テキストボックスの値は100000m
になります。
どうすればよいですか?