2011-05-18 5 views
0

に私は、Windowsがフォームコントロールライブラリ、およびそのNumeric Text BoxAlpa Numeric Text BoxDecimalなどのオプションを持って使用してカスタマイズされたテキストボックスを作成しました...カスタム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になります。

どうすればよいですか?

答えて

1

おそらく、これがあなたの質問である場合、マスクされたテキストボックスを使用することができます。私はあなたがすでにKeyDownを使っているのを見ているから、あなたはどのように対処するのか知っていると思う。 Walkthrough: Working with the MaskedTextBox Control

Me.MaskedTextBox1.Mask = "00/00/0000" 
MaskedTextBox1.ValidatingType = GetType(System.DateTime) 

Mask edit sample

1

たぶん、あなただけのTextBoxコントロールを継承し、OnTextChangedし、onKeyDownイベントを変更することができます。 thisリンクを見ると、彼は両方のイベントを使用します。 (名前は見ないでください)

これが何らかの理由であなたを助けてくれると思わないなら、あなたのものを私に説明してください。

関連する問題