修正--NumericTextBox

博客主要介绍了NumericTextBox控件在处理0输入时的修正方法,包括禁止在已非空文本或0.19等情况下输入0的细节。

一.修正说明

主要是针对0在控件中的输入情况做出了调整.在selectionstart = 0的时候,如果text.length ! =0,那么将限制对0的输入.同样,对于类似0.19,中光标位于0后边的情况,同样不允许输入0.

二.源代码

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace JcsExpLibary.Numeric_Textbox
{
    
public partial class JcsInputNum : TextBox 
    
{
        
private bool _isreadonly  = true ; //是否允许回车代替TAB
        private bool _isintegral  = false  ;//是否整数输入
        private bool _EnPaste  = true  ;//是否允许粘贴
        private bool  _EnContextMenu  = true ; //是否允许现实右键菜单
        private int _PointNumber = -1 ;//为-1时允许输入任意位小数
        private bool _isnegativenumber = false//是否允许输入负数
        public delegate void InputNumberTextBoxEvent();
        
public event InputNumberTextBoxEvent PasteEvent;
        
public JcsInputNum()
        
{
            InitializeComponent();
        }

        
/// <summary>
        
/// 是否只读
        
/// </summary>

        [Category("JCS属性"),Description("是否只读。")]
        
public bool Isreadonly
        
{
            
get return this._isreadonly; }
            
set this._isreadonly = value; }
        }

        
/// <summary>
        
/// 是否是整数 
        
/// </summary>

        [Category("JCS属性"), Description("是否整数。")]
        
public bool isintegral
        
{
            
get return this._isintegral; }
            
set { _isintegral = value; }
        }

   
        
/// <summary>
        
/// 是否允许输入负数 
        
/// </summary>

        [Category("JCS属性"), Description("是否允许输入负数。")]
        
public bool IsNegativeNumber
        
{
            
get return _isnegativenumber; }
            
set { _isnegativenumber = value; }
        }

        
/// <summary>
        
/// 精度位数控制(即:允许输入几位小数控制) 
        
/// </summary>

        [Category("JCS属性"), Description("精度位数控制,-1时允许输入任意位小数。")]
        
public int PointNumber
        
{
            
get return _PointNumber; }
            
set this._PointNumber = value; }
        }

        [Category(
"JCS属性"), Description("是否允许粘贴。")]
        
public bool EnablePaste
        
{
            
get return _EnPaste; }
            
set
            
{
                _EnPaste 
= value;
                
this.Invalidate();
            }

        }

        
/// <summary>
        
/// 
        
/// </summary>

        [Category("JCS属性"), Description("是否右键菜单。")]
        
public bool EnableContextMenu
        
{

            
get return _EnContextMenu; }
            
set
            
{
                _EnContextMenu 
= value;
                
this.Invalidate();
            }

        }



        
"private and overrides function" 


    }


}

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace serialConn { public partial class Form3 : Form { // 存储窗体原始大小 private Size originalSize; // 存储控件原始边界(位置和大小) private Dictionary<Control, Rectangle> originalBounds = new Dictionary<Control, Rectangle>(); public Form3() { InitializeComponent(); } private void Form3_Load(object sender, EventArgs e) { TxtEpromData1.MaxLength = 3; // 限制输入最长为3 TxtEpromData2.MaxLength = 3; TxtEpromData3.MaxLength = 3; TxtEpromData4.MaxLength = 3; TxtEpromData5.MaxLength = 3; TxtEpromData6.MaxLength = 3; // 保存原始窗体大小 originalSize = this.Size; // 初始化字典并保存所有控件的原始边界 originalBounds = new Dictionary<Control, Rectangle>(); SaveOriginalBounds(this); // 订阅窗体大小改变事件 this.Resize += Form3_Resize; } // 保存所有控件的原始边界(位置和大小) private void SaveOriginalBounds(Control container) { foreach (Control control in container.Controls) { originalBounds[control] = control.Bounds; // 如果控件包含子控件,递归保存 if (control.Controls.Count > 0) { SaveOriginalBounds(control); } } } // 窗体大小改变时调整控件 private void Form3_Resize(object sender, EventArgs e) { // 计算宽度和高度的缩放比例 float widthRatio = (float)this.Width / originalSize.Width; float heightRatio = (float)this.Height / originalSize.Height; // 调整所有控件的位置和大小 ResizeControls(this, widthRatio, heightRatio); } // 按比例调整控件的位置和大小 private void ResizeControls(Control container, float widthRatio, float heightRatio) { foreach (Control control in container.Controls) { if (originalBounds.ContainsKey(control)) { Rectangle original = originalBounds[control]; // 计算新的位置和大小 control.Left = (int)(original.Left * widthRatio); control.Top = (int)(original.Top * heightRatio); control.Width = (int)(original.Width * widthRatio); control.Height = (int)(original.Height * heightRatio); // 如果控件包含子控件,递归调整 if (control.Controls.Count > 0) { ResizeControls(control, widthRatio, heightRatio); } } } } private void TxtEpromData1_KeyPress(object sender, KeyPressEventArgs e) { if (((int)e.KeyChar < 48 && (int)e.KeyChar != 8) || ((int)e.KeyChar > 57)) { MessageBox.Show("请输入数字"); e.Handled = true; // 拒绝输入非数字字符 } } private void BtnStore_Click(object sender, EventArgs e) { // 计算有效数据数量(最多6个) int validCount = 0; if (!string.IsNullOrEmpty(TxtEpromData1.Text)) validCount++; if (!string.IsNullOrEmpty(TxtEpromData2.Text)) validCount++; if (!string.IsNullOrEmpty(TxtEpromData3.Text)) validCount++; if (!string.IsNullOrEmpty(TxtEpromData4.Text)) validCount++; if (!string.IsNullOrEmpty(TxtEpromData5.Text)) validCount++; if (!string.IsNullOrEmpty(TxtEpromData6.Text)) validCount++; if (validCount == 0) { MessageBox.Show("请输入至少1个数字"); return; } // 正确格式:设备号(1B) + 数据长度(1B) + 起始地址(1B) + 数据(nB) byte[] storeData = new byte[3 + validCount]; storeData[0] = 0x02; // 设备号:EEPROM storeData[1] = (byte)validCount; // 数据长度 storeData[2] = 0x00; // 起始地址(可根据需求修改) try { // 转换输入的数字并存储(增强输入检查) if (validCount >= 1) { if (byte.TryParse(TxtEpromData1.Text, out byte val1) && val1 <= 255) { storeData[3] = val1; } else { storeData[3] = 0x00; // 非法输入设为0 MessageBox.Show("输入数据1超出范围(0-255),已设为0"); } } if (validCount >= 2) { if (byte.TryParse(TxtEpromData2.Text, out byte val2) && val2 <= 255) { storeData[4] = val2; } else { storeData[4] = 0x00; MessageBox.Show("输入数据2超出范围(0-255),已设为0"); } } // 同理处理数据3-6(省略重复代码,格式相同) if (validCount >= 3) { // 数据3处理... if (byte.TryParse(TxtEpromData3.Text, out byte val3) && val3 <= 255) { storeData[5] = val3; } else { storeData[5] = 0x00; MessageBox.Show("输入数据2超出范围(0-255),已设为0"); } } if (validCount >= 4) { // 数据4处理... if (byte.TryParse(TxtEpromData4.Text, out byte val4) && val4 <= 255) { storeData[6] = val4; } else { storeData[6] = 0x00; MessageBox.Show("输入数据2超出范围(0-255),已设为0"); } } if (validCount >= 5) { // 数据5处理... if (byte.TryParse(TxtEpromData5.Text, out byte val5) && val5 <= 255) { storeData[7] = val5; } else { storeData[7] = 0x00; MessageBox.Show("输入数据2超出范围(0-255),已设为0"); } } if (validCount >= 6) { if (byte.TryParse(TxtEpromData6.Text, out byte val6) && val6 <= 255) { storeData[3 + validCount - 1] = val6; } else { storeData[3 + validCount - 1] = 0x00; MessageBox.Show("输入数据6超出范围(0-255),已设为0"); } } // 跨窗体调用,发送数据到Form1 if (Form1.news != null) { Form1.news(storeData); MessageBox.Show("数据已发送到单片机"); this.Close(); // 发送后关闭窗口 } } catch (Exception ex) { MessageBox.Show("数据处理错误:" + ex.Message); } } /*private void BtnStore_Click(object sender, EventArgs e) { byte[] storeData = new byte[7]; int temp; storeData[0] = 0x02; // 设备号,代表EEprom // 验证所有输入框是否有数据 if (string.IsNullOrEmpty(TxtEpromData1.Text) || string.IsNullOrEmpty(TxtEpromData2.Text) || string.IsNullOrEmpty(TxtEpromData3.Text) || string.IsNullOrEmpty(TxtEpromData4.Text) || string.IsNullOrEmpty(TxtEpromData5.Text) || string.IsNullOrEmpty(TxtEpromData6.Text)) { MessageBox.Show("请输入所有数字"); return; } try { // 转换输入的数字并存储 temp = int.Parse(TxtEpromData1.Text); storeData[1] = Convert.ToByte(temp); temp = int.Parse(TxtEpromData2.Text); storeData[2] = Convert.ToByte(temp); temp = int.Parse(TxtEpromData3.Text); storeData[3] = Convert.ToByte(temp); temp = int.Parse(TxtEpromData4.Text); storeData[4] = Convert.ToByte(temp); temp = int.Parse(TxtEpromData5.Text); storeData[5] = Convert.ToByte(temp); temp = int.Parse(TxtEpromData6.Text); storeData[6] = Convert.ToByte(temp); // 跨窗体调用,发送数据到Form1 if (Form1.news != null) { Form1.news(storeData); MessageBox.Show("数据已发送到单片机"); this.Close(); // 发送后关闭窗口 } } catch (FormatException) { MessageBox.Show("请输入有效的数字"); } }*/ } }
06-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值