关于wpf控件的textbox只允许输入整数,小数,且只能允许输入一位小数点

public class CustomTextBoxl:TextBox
{
public CustomTextBox()
{
PreviewTextInput += TextBoxControl_PreviewTextInput;
DataObject.AddPastingHandler(this, Pasting_Text);
}

    //限制非法字符输入,只允许输入数字和小数点
    private void TextBoxControl_PreviewTextInput(object sender,
        TextCompositionEventArgs e)
    {
        var textBox = sender as TextBox;
        //这是对中文值的判断
        if(textBox==null)return;
        //if (Regex.IsMatch(textBox.Text, @"[\u4e00-\u9fbb]+$"))
        //{
         //   textBox.Text = "";
         //   e.Handled = true;
          //  return;
        //}
        //匹配只能输入一个小数点的浮点数
     Regex numbeRegex = new Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$");
        e.Handled =
                !numbeRegex.IsMatch(
                    textBox.Text.Insert(
                        textBox.SelectionStart, e.Text));
        textBox.Text = textBox.Text.Trim();
    }

    /// <summary>
    /// 键盘输入值事件(可以小键盘上的数字键和英文输入状态下的句点键盘)
    /// </summary>
    /// <param name="e"></param>
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9 &&
             e.KeyboardDevice.Modifiers != ModifierKeys.Shift)
            ||
            (e.Key >= Key.D0 && e.Key <= Key.D9 &&
             e.KeyboardDevice.Modifiers != ModifierKeys.Shift) ||
            e.Key == Key.Back || e.Key == Key.Left || e.Key == Key.Right ||
            e.Key == Key.Enter || e.Key == Key.Decimal ||
            e.Key == Key.OemPeriod)
        {
            if (e.KeyboardDevice.Modifiers != ModifierKeys.None)
            {
                e.Handled = false;
            }
        }
        else
        {
            e.Handled = true;
        }
    }

    /// <summary>
    ///  禁止粘贴
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void v_Text_(object sender, DataObjectPastingEventArgs e)
    {
        e.CancelCommand();
    }
}
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值