自定义然后手工修改基类为 TextBox 可不可以

解决方案 »

  1.   

    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.ComponentModel;
    using System.Windows.Forms.Design;namespace CustomControls
    {
    /// <summary>
    /// Summary description for NumbersOnlyTextBox.
    /// </summary>
    // [Designer(typeof(NumbersOnlyTextBox.NumbersOnlyTexboxDesigner))]
    public class NumbersOnlyTextBox:System.Windows.Forms.TextBox
    {
    public NumbersOnlyTextBox()
    {
    //
    // TODO: Add constructor logic here
    //
    } #region Static Fields //TODO:调用winapi,使键盘输入时发出声音
    [DllImport("user32.dll")]
    private static extern bool MessageBeep(uint uType); #endregion #region Method Overrides
    //TODO:重写键盘敲击发声
    protected override bool ProcessKeyEventArgs(ref Message m)
    {
    int keyValue=m.WParam.ToInt32();
    // keyValue>47&&<58 : 0-9
    // keyValue=46 : Decimal Point
    // keyValue>34&& keyValue<41 :Home ,End and Arrow Keys
    // keyValue==8 :Backspace Key if ( (keyValue>47&&keyValue<58)||(keyValue==46)||(keyValue>34&&keyValue<41)||(keyValue==8) )
    {
    return base.ProcessKeyPreview(ref m); //返回击键,以正常程序处理
    }
    else
    {
    //delete key
    if (m.Msg==256&&keyValue==46)
    {
    return base.ProcessKeyPreview(ref m); //返回击键,以正常程序处理
    } if (m.Msg==258)
    {
    MessageBeep(16);
    }
    return true;
    } } 
    #endregion
    //
    // #region Internal Classes
    // internal class NumbersOnlyTexboxDesigner:ControlDesigner
    // {
    // protected override void PostFilterProperties(System.Collections.IDictionary properties)
    // {
    // properties.Remove("Text");
    // }
    // }
    //
    // #endregion
    }
    }
      

  2.   

    public class TextMoney:System.Windows.Forms.TextBox 
    {
    public TextMoney()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    } private void InitializeComponent()
    {
    // 
    // TextMoney
    // 

    }
    protected override void OnKeyPress( System.Windows.Forms.KeyPressEventArgs e)
    {
    if(e.KeyChar==8)
    {
    return;
    }
    if(e.KeyChar=='.' && this.Text.IndexOf('.')==-1)
    {
    return;
    }
    if(!char.IsNumber(e.KeyChar))
    {
    e.Handled=true; 
    }
    base.OnKeyPress(e); 
    }
    }