建设部网站招标投标文件python语言属于什么语言
NumericUpDown(数字上下控件)是 WinForm 中专门用于输入和调整数值的控件,它结合了文本框和上下按钮,用户可通过点击按钮或直接输入来设置数值,且能严格限制数值范围(最小值、最大值)和步长,适用于需要精确控制数值输入的场景(如年龄、数量、价格、权重等)。
NumericUpDown 控件的核心属性
NumericUpDown 的核心特性是 “数值约束” 和 “便捷调整”,其常用属性如下:
| 属性名 | 作用描述 |
|---|---|
Value | 获取或设置当前数值(核心属性,类型为 decimal),如 numericUpDown1.Value = 10。 |
Minimum | 设置允许的最小值(decimal 类型),默认 0,如 Minimum = 1 限制数值不能小于 1。 |
Maximum | 设置允许的最大值(decimal 类型),默认 100,如 Maximum = 120 限制数值不能大于 120。 |
Increment | 设置每次点击上下按钮时数值的增减步长(decimal 类型),默认 1,如 Increment = 0.5 每次增减 0.5。 |
DecimalPlaces | 设置显示的小数位数(默认 0,即整数),如 DecimalPlaces = 2 显示两位小数(如 10.50)。 |
Hexadecimal | 布尔值,控制是否以十六进制显示数值(默认 False),设为 True 时数值以十六进制显示(仅对整数有效)。 |
ReadOnly | 布尔值,控制是否只读(True 时不能直接输入,但可通过按钮调整)。 |
ThousandsSeparator | 布尔值,控制是否显示千位分隔符(如 1,000),默认 False。 |
Text | 获取或设置控件显示的文本(与 Value 对应,通常无需手动修改)。 |
UpDownAlign | 控制上下按钮的对齐方式(Left 左对齐,Right 右对齐,默认 Right)。 |
NumericUpDown 控件的常用事件
NumericUpDown 的事件主要用于响应数值变化,常用事件如下:
| 事件名 | 触发时机 |
|---|---|
ValueChanged | 当 Value 属性值发生变化时触发(核心事件),无论是通过按钮调整还是直接输入,都会触发,用于处理数值变更后的逻辑。 |
Click | 点击控件时触发(包括文本框和按钮区域)。 |
KeyPress | 在文本框中按下键盘按键时触发(可用于拦截无效输入,但控件默认会自动过滤非数值字符)。 |
NumericUpDown 控件的典型用法
NumericUpDown 适用于需要精确控制数值范围和格式的场景,常见用法如下:
整数输入(如年龄、数量) 设置
DecimalPlaces = 0(默认),Minimum和Maximum限制范围(如年龄:Minimum = 0,Maximum = 120)。小数输入(如价格、重量) 设置
DecimalPlaces = 2保留两位小数,Increment = 0.01精确调整(如价格:Minimum = 0,Maximum = 9999.99)。十六进制数值输入 设置
Hexadecimal = True,用于需要十六进制表示的场景(如颜色值、硬件地址)。步长调整 根据需求设置
Increment(如音量调整步长为 5:Increment = 5,范围0-100)。数值变化联动 通过
ValueChanged事件联动其他控件(如数值变化时实时计算总价、更新进度条等)。
整数控制示例(年龄选择)

最大值
![]()
最小值
![]()
初始值
![]()
保留几位小数
![]()

十六进制显示示例
![]()

使用示例:多样化的 NumericUpDown 效果
以下代码演示了 NumericUpDown 的核心用法,包括整数控制、小数控制、十六进制显示及数值联动等场景:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace NumericUpDownDemo
{public class NumericUpDownExampleForm : Form{// 用于联动计算的标签private Label totalPriceLabel;
public NumericUpDownExampleForm(){// 窗体基础设置Text = "NumericUpDown 控件示例";Size = new Size(500, 400);StartPosition = FormStartPosition.CenterScreen;totalPriceLabel = new Label();Controls.AddRange(CreateNumericUpDowns()); // 添加所有控件}
// 创建不同功能的NumericUpDown控件private Control[] CreateNumericUpDowns(){List<Control> controls = new List<Control>();
// 1. 整数控制示例(年龄选择)Label ageLabel = new Label{Text = "1. 年龄(0-120岁):",Location = new Point(30, 30),AutoSize = true};controls.Add(ageLabel);
NumericUpDown ageNumeric = new NumericUpDown{Location = new Point(200, 30),Size = new Size(100, 20),Minimum = 0, // 最小年龄0Maximum = 120, // 最大年龄120Increment = 1, // 步长1DecimalPlaces = 0, // 整数(无小数)Value = 18 // 默认值18};controls.Add(ageNumeric);
// 年龄数值变化事件Label ageResultLabel = new Label{Text = "当前年龄:18",Location = new Point(320, 30),AutoSize = true,ForeColor = Color.Blue};controls.Add(ageResultLabel);ageNumeric.ValueChanged += (sender, e) =>{ageResultLabel.Text = $"当前年龄:{ageNumeric.Value}";};
// 2. 小数控制示例(商品单价)Label priceLabel = new Label{Text = "2. 单价(0-999.99元):",Location = new Point(30, 80),AutoSize = true};controls.Add(priceLabel);
NumericUpDown priceNumeric = new NumericUpDown{Location = new Point(200, 80),Size = new Size(100, 20),Minimum = 0,Maximum = 999.99m, // decimal类型需加m后缀Increment = 0.01m, // 步长0.01(精确到分)DecimalPlaces = 2, // 保留两位小数ThousandsSeparator = true, // 显示千位分隔符(如1,000.00)Value = 99.99m};controls.Add(priceNumeric);
// 3. 数量选择(与单价联动计算总价)Label quantityLabel = new Label{Text = "3. 数量(1-100):",Location = new Point(30, 130),AutoSize = true};controls.Add(quantityLabel);
NumericUpDown quantityNumeric = new NumericUpDown{Location = new Point(200, 130),Size = new Size(100, 20),Minimum = 1,Maximum = 100,Increment = 1,Value = 1};controls.Add(quantityNumeric);
// 总价标签(联动计算)Label totalLabel = new Label{Text = "总价:",Location = new Point(320, 130),AutoSize = true};totalPriceLabel = new Label{Text = $"{priceNumeric.Value * quantityNumeric.Value:C}", // 格式化货币Location = new Point(370, 130),AutoSize = true,ForeColor = Color.Green};controls.AddRange(new[] { totalLabel, totalPriceLabel });
// 单价或数量变化时,更新总价priceNumeric.ValueChanged += UpdateTotalPrice;quantityNumeric.ValueChanged += UpdateTotalPrice;
// 4. 十六进制显示示例Label hexLabel = new Label{Text = "4. 十六进制数值(0-255):",Location = new Point(30, 180),AutoSize = true};controls.Add(hexLabel);
NumericUpDown hexNumeric = new NumericUpDown{Location = new Point(200, 180),Size = new Size(100, 20),Minimum = 0,Maximum = 255,Increment = 1,Hexadecimal = true, // 启用十六进制显示Value = 255 // 十六进制为FF};controls.Add(hexNumeric);
// 显示对应的十进制值Label hexDecimalLabel = new Label{Text = $"十进制:{hexNumeric.Value}",Location = new Point(320, 180),AutoSize = true,ForeColor = Color.Purple};controls.Add(hexDecimalLabel);hexNumeric.ValueChanged += (sender, e) =>{hexDecimalLabel.Text = $"十进制:{hexNumeric.Value}";};
// 5. 步长调整示例(音量控制)Label volumeLabel = new Label{Text = "5. 音量(0-100,步长5):",Location = new Point(30, 230),AutoSize = true};controls.Add(volumeLabel);
NumericUpDown volumeNumeric = new NumericUpDown{Location = new Point(200, 230),Size = new Size(100, 20),Minimum = 0,Maximum = 100,Increment = 5, // 步长5Value = 50};controls.Add(volumeNumeric);
// 音量进度条(联动显示)ProgressBar volumeProgress = new ProgressBar{Location = new Point(320, 230),Size = new Size(150, 20),Maximum = 100,Value = 50};controls.Add(volumeProgress);volumeNumeric.ValueChanged += (sender, e) =>{volumeProgress.Value = (int)volumeNumeric.Value;};
return controls.ToArray();}
// 更新总价(单价×数量)private void UpdateTotalPrice(object sender, EventArgs e){// 假设单价和数量控件的名称NumericUpDown priceNumeric = Controls.OfType<NumericUpDown>().ElementAt(1);NumericUpDown quantityNumeric = Controls.OfType<NumericUpDown>().ElementAt(2);decimal total = priceNumeric.Value * quantityNumeric.Value;totalPriceLabel.Text = total.ToString("C"); // 格式化货币(如¥99.99)}
// 程序入口[STAThread]static void Main(){Application.EnableVisualStyles();Application.Run(new NumericUpDownExampleForm());}}
}
代码说明
这个示例展示了 NumericUpDown 的核心用法,重点包括:
年龄控制:设置
Minimum = 0、Maximum = 120、DecimalPlaces = 0,限制为 0-120 的整数,通过ValueChanged事件实时显示当前年龄。商品单价:
DecimalPlaces = 2保留两位小数,Increment = 0.01m精确到分,ThousandsSeparator = true显示千位分隔符(如 “1,000.00”),符合价格显示习惯。联动计算:单价和数量的 NumericUpDown 控件通过
ValueChanged事件联动,实时计算总价(单价 × 数量),并以货币格式(C)显示。十六进制显示:
Hexadecimal = true启用十六进制模式,数值显示为十六进制(如 255 显示为 “FF”),同时展示对应的十进制值,适合硬件或底层开发场景。音量控制:
Increment = 5设置步长为 5,配合 ProgressBar 实时显示音量进度,演示数值与其他控件的联动效果。
使用注意事项
数据类型转换
Value属性是decimal类型,如需整数需强制转换(如(int)numericUpDown1.Value),注意小数转整数会自动截断(而非四舍五入)。输入验证 控件会自动过滤非数值输入(如字母、符号),用户输入超出
Minimum/Maximum范围时,会自动修正为最近的有效值(如输入 130 时,若Maximum=120则自动改为 120)。小数位数与步长配合 若
DecimalPlaces = 2,建议Increment设为0.01的倍数(如0.05、0.1),避免出现过多小数位(如步长 0.33,可能显示1.333)。十六进制模式限制
Hexadecimal = true时,DecimalPlaces会自动失效(仅支持整数),且Value仍为十进制存储(显示为十六进制)。只读模式
ReadOnly = true时,用户不能直接输入文本,但仍可通过上下按钮调整数值,适合需要限制手动输入但允许调整的场景。
NumericUpDown 控件通过严格的数值约束和便捷的调整方式,完美解决了数值输入的准确性问题,是表单中处理年龄、价格、数量等数值型数据的首选控件。
