当前位置: 首页 > backend >正文

wpf 只能输入int类型的文本框

我做的这个文本框,可设置最大值,最小值,有失去焦点事件的话,失去焦点文本框里的数字是你上次填的数字,避免数据为空的情况。

有失去焦点事件

using System.Windows.Input;
using System.Windows;
using System.Windows.Controls;namespace 项目名
{public class IntegerTextBox : TextBox{public bool isMouseEntered = false;public string PreviousText{get { return (string)GetValue(PreviousTextProperty); }set { SetValue(PreviousTextProperty, value); }}public static readonly DependencyProperty PreviousTextProperty =DependencyProperty.Register("PreviousText", typeof(string), typeof(IntegerTextBox), new PropertyMetadata(string.Empty));public string HistoryText{get { return (string)GetValue(HistoryTextProperty); }set { SetValue(HistoryTextProperty, value); }}public static readonly DependencyProperty HistoryTextProperty = DependencyProperty.Register("HistoryText", typeof(string), typeof(IntegerTextBox), new PropertyMetadata(string.Empty));public int? MinValue{get { return (int?)GetValue(MinValueProperty); }set { SetValue(MinValueProperty, value); }}public static readonly DependencyProperty MinValueProperty =DependencyProperty.Register("MinValue", typeof(int?), typeof(IntegerTextBox));public int MaxValue{get { return (int)GetValue(MaxValueProperty); }set { SetValue(MaxValueProperty, value); }}public static readonly DependencyProperty MaxValueProperty =DependencyProperty.Register("MaxValue", typeof(int), typeof(IntegerTextBox), new PropertyMetadata(int.MaxValue));public static bool GetIsEnabled(DependencyObject obj){return (bool)obj.GetValue(IsGotFocusProperty);}public static void SetIsEnabled(DependencyObject obj, bool value){obj.SetValue(IsGotFocusProperty, value);}public bool IsNeedLoseFucos{get { return (bool)GetValue(IsNeedLoseFucosvProperty); }set { SetValue(IsNeedLoseFucosvProperty, value); }}public static readonly DependencyProperty IsNeedLoseFucosvProperty =DependencyProperty.RegisterAttached("IsNeedLoseFucos", typeof(bool), typeof(IntegerTextBox), new PropertyMetadata(true));public bool IsGotFocus{get { return (bool)GetValue(IsGotFocusProperty); }set { SetValue(IsGotFocusProperty, value); }}public static readonly DependencyProperty IsGotFocusProperty =DependencyProperty.RegisterAttached("IsGotFocus", typeof(bool), typeof(IntegerTextBox), new PropertyMetadata(false));static IntegerTextBox(){DefaultStyleKeyProperty.OverrideMetadata(typeof(IntegerTextBox), new FrameworkPropertyMetadata(typeof(IntegerTextBox)));}public IntegerTextBox(){LostFocus += IntegerTextBox_LostFocus;PreviewTextInput += IntegerTextBox_PreviewTextInput;}private void IntegerTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e){Text = Text.Trim();string txt = Text + e.Text;if (txt.Length > 1 && txt.StartsWith('0')){Text = Text.Substring(1);}if (!int.TryParse(txt, out int value)){if (!string.IsNullOrWhiteSpace(Text)){var index = Text.IndexOf(e.Text);if (index > -1) { Text = Text.Remove(index); }SelectionStart = Text.Length + e.Text.Length;}e.Handled = true; // 阻止输入非数字字符}//else if (value < MinValue && value.ToString().Length == MinValue.ToString().Length)//{//    Text = MinValue.ToString(); // 将文本框的值设置为最小值//    SelectionStart = Text.Length + e.Text.Length;//    e.Handled = true; // 阻止输入超出取值范围的数字//}else if (value > MaxValue){Text = MaxValue.ToString(); // 将文本框的值设置为最大值SelectionStart = Text.Length + e.Text.Length;e.Handled = true; // 阻止输入超出取值范围的数字}else{Text = value.ToString();SelectionStart = Text.Length + e.Text.Length;e.Handled = true;}SelectionStart = Text.Length + e.Text.Length;HistoryText = Text;}private void IntegerTextBox_LostFocus(object sender, RoutedEventArgs e){IsGotFocus = false;Text = Text.Trim();if (string.IsNullOrEmpty(Text)){if (!string.IsNullOrEmpty(HistoryText) && int.TryParse(HistoryText, out int history) && history > MinValue){Text = HistoryText;}else if (!string.IsNullOrEmpty(PreviousText)){Text = PreviousText;}else if (MinValue is not null){Text = MinValue.Value.ToString();}}else{if (int.TryParse(Text, out int num)){if (num < MinValue){if (!string.IsNullOrEmpty(HistoryText) && int.TryParse(HistoryText, out int history) && history > MinValue){Text = HistoryText;}else{Text = MinValue.ToString();}}else if (num > MaxValue){if (!string.IsNullOrEmpty(HistoryText) && int.TryParse(HistoryText, out int history) && history < MaxValue){Text = HistoryText;}else if (!string.IsNullOrEmpty(PreviousText)){Text = PreviousText;}else{Text = MaxValue.ToString();}}}}SelectionStart = Text.Length;}}
}


没有失去焦点事件:

public class IntegerTextBoxNoLF : TextBox{public bool isMouseEntered = false;public string PreviousText{get { return (string)GetValue(PreviousTextProperty); }set { SetValue(PreviousTextProperty, value); }}public static readonly DependencyProperty PreviousTextProperty =DependencyProperty.Register("PreviousText", typeof(string), typeof(IntegerTextBoxNoLF), new PropertyMetadata(string.Empty));public string HistoryText{get { return (string)GetValue(HistoryTextProperty); }set { SetValue(HistoryTextProperty, value); }}public static readonly DependencyProperty HistoryTextProperty = DependencyProperty.Register("HistoryText", typeof(string), typeof(IntegerTextBoxNoLF), new PropertyMetadata(string.Empty));public int? MinValue{get { return (int?)GetValue(MinValueProperty); }set { SetValue(MinValueProperty, value); }}public static readonly DependencyProperty MinValueProperty =DependencyProperty.Register("MinValue", typeof(int?), typeof(IntegerTextBoxNoLF));public int MaxValue{get { return (int)GetValue(MaxValueProperty); }set { SetValue(MaxValueProperty, value); }}public static readonly DependencyProperty MaxValueProperty =DependencyProperty.Register("MaxValue", typeof(int), typeof(IntegerTextBoxNoLF), new PropertyMetadata(int.MaxValue));public static bool GetIsEnabled(DependencyObject obj){return (bool)obj.GetValue(IsGotFocusProperty);}public static void SetIsEnabled(DependencyObject obj, bool value){obj.SetValue(IsGotFocusProperty, value);}public bool IsNeedLoseFucos{get { return (bool)GetValue(IsNeedLoseFucosvProperty); }set { SetValue(IsNeedLoseFucosvProperty, value); }}public static readonly DependencyProperty IsNeedLoseFucosvProperty =DependencyProperty.RegisterAttached("IsNeedLoseFucos", typeof(bool), typeof(IntegerTextBoxNoLF), new PropertyMetadata(true));public bool IsGotFocus{get { return (bool)GetValue(IsGotFocusProperty); }set { SetValue(IsGotFocusProperty, value); }}public static readonly DependencyProperty IsGotFocusProperty =DependencyProperty.RegisterAttached("IsGotFocus", typeof(bool), typeof(IntegerTextBoxNoLF), new PropertyMetadata(false));static IntegerTextBoxNoLF(){DefaultStyleKeyProperty.OverrideMetadata(typeof(IntegerTextBoxNoLF), new FrameworkPropertyMetadata(typeof(IntegerTextBoxNoLF)));}public IntegerTextBoxNoLF(){PreviewTextInput += IntegerTextBox_PreviewTextInput;//PreviewMouseLeftButtonDown += IntegerTextBox_PreviewMouseLeftButtonDown;}private void IntegerTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e){Text = Text.Trim();string txt = Text + e.Text;if (txt.Length > 1 && txt.StartsWith('0')){Text = Text.Substring(1);}if (!int.TryParse(txt, out int value)){if (!string.IsNullOrWhiteSpace(Text)){var index = Text.IndexOf(e.Text);if (index > -1) { Text = Text.Remove(index); }SelectionStart = Text.Length + e.Text.Length;}e.Handled = true; // 阻止输入非数字字符}else if (value < MinValue && value.ToString().Length == MinValue.ToString().Length){Text = MinValue.ToString(); // 将文本框的值设置为最小值SelectionStart = Text.Length + e.Text.Length;e.Handled = true; // 阻止输入超出取值范围的数字}else if (value > MaxValue){Text = MaxValue.ToString(); // 将文本框的值设置为最大值SelectionStart = Text.Length + e.Text.Length;e.Handled = true; // 阻止输入超出取值范围的数字}else{Text = value.ToString();SelectionStart = Text.Length + e.Text.Length;e.Handled = true;}SelectionStart = Text.Length + e.Text.Length;HistoryText = Text;}private void IntegerTextBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e){Text = string.Empty;Focusable = true;Focus();IsGotFocus = true;}}

调用:

 

<local:IntegerTextBox MinValue="0" MaxValue="59" TextAlignment="Center" Width="120" Height="48" Text="{Binding Program.VibrationHour,TargetNullValue={x:Static sys:String.Empty}}" VerticalContentAlignment="Center" InputMethod.IsInputMethodEnabled="False" />

http://www.xdnf.cn/news/19788.html

相关文章:

  • WebSocket客户端库:websocket-fruge365
  • Ubuntu下把 SD 卡格式化为 FAT32
  • Hostol Magento电商服务器套餐:基于阿里云,预配置高性能环境,一键开店
  • 如何用java给局域网的电脑发送开机数据包
  • B样条曲线,已知曲线上的某个点到起点的距离,确定这个点的参数u的值的方法
  • 新手向:破解VMware迁移难题
  • MP4视频太大如何压缩?分享6种简单便捷的压缩小技巧
  • websocket用于控制在当前页只允许一个用户进行操作,其他用户等待
  • 硬件(一)51单片机
  • 阿里开源首个图像生成基础模型——Qwen-Image本地部署教程,中文渲染能力刷新SOTA
  • HTTP 协议核心组件与安全扩展深度解析
  • 机器学习与深度学习的 Python 基础之 NumPy(2)
  • uniapp+vue3 微信小程序全屏广告组件功能
  • AI IDE+AI 辅助编程,真能让程序员 “告别 996” 吗?
  • 【LeetCode_283】移动零
  • 技术小白如何快速的了解opentenbase?--把握四大特色
  • XE 旧版本 JSON 处理
  • 使用 Uni-app 打包 外链地址APK 及 iOS 注意事项
  • K8S-基础架构
  • 离开职场2个月,后知后觉的反思。
  • 素材合集!直播间带货音乐BGM合集,抖音直播间常用热门音乐合集,根据中文分类,方便查找
  • 力扣hot100:矩阵置零(73)(原地算法)
  • 【Python语法基础学习笔记】类的定义和使用
  • WSL + VSCode + Git + Node.js 开发环境配置文档
  • python数据分析 与spark、hive数据分析对比
  • 使用pyspark对上百亿行的hive表生成稀疏向量
  • 2025年COR IOTJ SCI2区,灾后通信无人机基站位置优化和移动充电无人机路径规划,深度解析+性能实测
  • Android aoap开发常见问题之package_allowed_list.txt导致的编译报错
  • 深度学习------模型的保存和使用
  • 深度学习篇---Adam优化器