2011-05-18 101 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 的unit爲了這個,我已經添加在TextBox typeDistance一個新的枚舉。 所以,如果我進入了一個十進制數,之後,如果我按了k鍵,然後在文本框中的值應該與Km

附加例如,如果文本框的文本是100然後我按01​​然後將文本框的文本應該是100Km

而且我還需要將單位更改功能提供給Up Down鍵。

所以,如果我在文本框中按down鍵上面的值,那麼文本框的值應該是100000m

我該怎麼做?

回答

1

也許你可以只繼承TextBox控件和改變OnTextChanged和的onkeydown事件。看看this鏈接,他使用這兩個事件。 (不要看名字雖然)

如果你不認爲這會幫助你,無論出於何種原因,請解釋我什麼擁有你。