WinForm之NumericUpDown控件

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 的事件主要用于響應數值變化,常用事件如下:

事件名觸發時機
ValueChangedValue 屬性值發生變化時觸發(核心事件),無論是通過按鈕調整還是直接輸入,都會觸發,用于處理數值變更后的邏輯。
Click點擊控件時觸發(包括文本框和按鈕區域)。
KeyPress在文本框中按下鍵盤按鍵時觸發(可用于攔截無效輸入,但控件默認會自動過濾非數值字符)。

NumericUpDown 控件的典型用法

NumericUpDown 適用于需要精確控制數值范圍和格式的場景,常見用法如下:

  1. 整數輸入(如年齡、數量) 設置 DecimalPlaces = 0(默認),MinimumMaximum 限制范圍(如年齡:Minimum = 0Maximum = 120)。

  2. 小數輸入(如價格、重量) 設置 DecimalPlaces = 2 保留兩位小數,Increment = 0.01 精確調整(如價格:Minimum = 0Maximum = 9999.99)。

  3. 十六進制數值輸入 設置 Hexadecimal = True,用于需要十六進制表示的場景(如顏色值、硬件地址)。

  4. 步長調整 根據需求設置 Increment(如音量調整步長為 5:Increment = 5,范圍 0-100)。

  5. 數值變化聯動 通過 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 的核心用法,重點包括:

  1. 年齡控制:設置 Minimum = 0Maximum = 120DecimalPlaces = 0,限制為 0-120 的整數,通過 ValueChanged 事件實時顯示當前年齡。

  2. 商品單價DecimalPlaces = 2 保留兩位小數,Increment = 0.01m 精確到分,ThousandsSeparator = true 顯示千位分隔符(如 “1,000.00”),符合價格顯示習慣。

  3. 聯動計算:單價和數量的 NumericUpDown 控件通過 ValueChanged 事件聯動,實時計算總價(單價 × 數量),并以貨幣格式(C)顯示。

  4. 十六進制顯示Hexadecimal = true 啟用十六進制模式,數值顯示為十六進制(如 255 顯示為 “FF”),同時展示對應的十進制值,適合硬件或底層開發場景。

  5. 音量控制Increment = 5 設置步長為 5,配合 ProgressBar 實時顯示音量進度,演示數值與其他控件的聯動效果。

使用注意事項

  1. 數據類型轉換 Value 屬性是 decimal 類型,如需整數需強制轉換(如 (int)numericUpDown1.Value),注意小數轉整數會自動截斷(而非四舍五入)。

  2. 輸入驗證 控件會自動過濾非數值輸入(如字母、符號),用戶輸入超出 Minimum/Maximum 范圍時,會自動修正為最近的有效值(如輸入 130 時,若 Maximum=120 則自動改為 120)。

  3. 小數位數與步長配合DecimalPlaces = 2,建議 Increment 設為 0.01 的倍數(如 0.050.1),避免出現過多小數位(如步長 0.33,可能顯示 1.333)。

  4. 十六進制模式限制 Hexadecimal = true 時,DecimalPlaces 會自動失效(僅支持整數),且 Value 仍為十進制存儲(顯示為十六進制)。

  5. 只讀模式 ReadOnly = true 時,用戶不能直接輸入文本,但仍可通過上下按鈕調整數值,適合需要限制手動輸入但允許調整的場景。

NumericUpDown 控件通過嚴格的數值約束和便捷的調整方式,完美解決了數值輸入的準確性問題,是表單中處理年齡、價格、數量等數值型數據的首選控件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91764.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一文讀懂K8S kubectl 命令,運維小白必看!

一、Kubectl 是什么? Kubectl 是 Kubernetes(簡稱 K8S)集群的命令行工具,它就像是一把萬能鑰匙,讓我們可以與 K8S 集群進行交互,輕松管理集群中的各種資源,像是 Pod、Service、Deployment 等等。通過向 K8S API 發送 REST 請求,kubectl 實現了對集群資源的增刪改查等操…

髖臼方向的定義與測量-I

近期看到關于髖臼方向不同應用場景下的不同定義&#xff0c;覺得特別有意思&#xff0c;但是&#xff0c;原文是影印本&#xff0c;不太方便實用屏幕取詞翻譯&#xff0c;且一些專業術語也不太好理解。 因此&#xff0c;我將原文和翻譯整理了一些&#xff0c;不對的地方&#x…

Python爬蟲實戰:研究mahotas庫,構建圖像獲取及處理系統

一、引言 (一)研究背景 在信息爆炸的時代,圖像作為一種直觀、豐富的信息載體,其數量在互聯網上呈現指數級增長。這些圖像數據涵蓋了自然景觀、動植物、工業產品等多個領域,為模式識別、機器學習等研究提供了寶貴的數據源。特別是在植物學研究領域,葉片圖像包含了豐富的…

【04】海康相機C#開發——VS 在編譯時,提示“Files的值“+亂碼情況解決辦法’ ,C#項目打開編譯時報錯:Files 的值“IGEF‘,

文章目錄C#項目打開&#xff0c;用VS 在編譯時編譯時報錯&#xff1a;Files 的值“亂碼&#xff1b; 有的編譯器會顯示&#xff1a;Files的值“IGEF 以上報錯都為同一種錯誤&#xff0c;.net中的配置文件亂碼導致的&#xff1a; 找到項目目錄下的“..\obj\Debug\”的文件夾中…

MySQL隱式轉換陷阱:從錯誤查詢案例解析索引失效與數據類型匹配

開始之前&#xff0c;先問個問題問題&#xff1a;mysql 數據類型是date &#xff0c;怎么寫查詢條件索引有效&#xff1f; ——下面帶著疑問看下去。 一、mysql-8.隱式轉換導致索引失效或查出不符合where條件結果 今天在執行一條sql語句時候&#xff0c;where條件寫錯了&#x…

【sklearn(01)】數據集加載、劃分,csv文件創建,特征工程,無量綱化

目錄sklearn數據集玩具數據集現實世界數據集加載玩具數據集獲取現實世界數據集本地csv數據創建csv文件pandas加載csv數據集劃分特征工程步驟特征工程APIDictVectorizer 字典列表特征提取APICountVectorizer 文本特征提取API英文文本提取中文文本提取TfidfVectorizer TF-IDF文本…

docker desktop入門(docker桌面版)(提示wsl版本太低解決辦法)

參考文章&#xff1a;Docker Desktop Engine Stopped原因分析&#xff08;docker桌面停止&#xff09;WSL沒裝或沒更新 文章目錄Docker Desktop入門指南1. Docker Desktop簡介2. 安裝Docker Desktop2.1 系統要求2.2 下載和安裝3. 配置Docker Desktop修改默認存儲路徑4. 運行你的…

《n8n基礎教學》第三節:模擬一個自動化場景

1、模擬場景Nathan &#x1f64b;是 ABCorp 的分析經理&#xff0c;他的工作是支持 ABCorp 團隊的報告和分析。作為一個真正的多面手&#xff0c;他還負責處理一些雜項任務。Nathan 做的一些事情是重復且枯燥的。他希望自動化其中一些任務&#xff0c;以避免精疲力竭。作為一名…

CodeRush AI 助手進駐 Visual Studio:AiGen/AiFind 亮相(三)

CodeRush 是專為 Visual Studio 打造的高效開發插件&#xff0c;通過集成 AI 驅動功能&#xff08;如自然語言生成代碼的 AiGen 和智能搜索邏輯的 AiFind&#xff09;、語音交互及深度重構工具&#xff0c;直接在 IDE 內無縫完成代碼生成、修改與導航&#xff0c;消除窗口切換與…

如何從頭開始搭建屬于自己的家用nas實現內網穿透訪問

最近我在家部署了群暉NAS923&#xff0c;從而實現內網穿透&#xff0c;下面寫一個新手向教程&#xff1a; 一、硬件安裝與初始化設置 1. 硬盤安裝&#xff08;已完成可跳過&#xff09; 群暉 923 支持 4 塊 3.5 英寸硬盤&#xff0c;開箱后取出硬盤架&#xff0c;將硬盤&am…

mysql 之多表

mysql之多表已知2張基本表&#xff1a;部門表&#xff1a;dept &#xff08;部門號&#xff0c;部門名稱&#xff09;;員工表 emp&#xff08;員工號&#xff0c;員工姓名&#xff0c;年齡&#xff0c;入職時間&#xff0c;收入&#xff0c;部門號&#xff09;CREATE table dep…

【Django】-6- 登錄用戶身份鑒權

一、&#x1f6e1;? Django 鑒權 & 登錄控制 Django 自帶的鑒權系統&#xff08;用戶身份管理小管家&#xff09;鑒權系統能干啥&#xff1f;Django 自帶的鑒權系統&#xff0c;就像一個 “用戶身份管家” &#xff0c;幫你管好這些事兒&#xff1a;功能類比加密存儲用戶密…

winscp 連openwrt 返回127錯誤碼

winscp 連openwrt 24.10返回127錯誤碼。找了許多原因也沒搞清為啥&#xff08;客戶端加密方式、winscp版本過低等都試過&#xff09;&#xff0c;用SecureFx試了一下&#xff0c;發現是openwrt 24.10固件沒有安裝Sftp服器&#xff0c;用下列命令安裝即可。opkg install openssh…

Python編程基礎與實踐:Python文件處理入門

Python文件處理實戰 學習目標 通過本課程的學習&#xff0c;學員將掌握如何在Python中打開、讀取、寫入和關閉文件&#xff0c;了解文本文件和二進制文件的區別&#xff0c;以及在文件處理中的一些最佳實踐。 相關知識點 Python文件處理 學習內容 1 Python文件處理 1.1 文件的基…

Corrosion2靶機

打開靶機信息收集&#xff1a;kali里使用arp-scan -l或者netdiscover發現主機使用nmap掃描端口nmap -sS -sV -T4 -n -p- 192.168.31.20開啟了22、80、8080端口 8080發現開啟了tomcat服務掃出了他的ip以及他開放的端口&#xff0c;我們接下來拿瀏覽器訪問一下兩個頁面都沒有什么…

編程與數學 03-002 計算機網絡 18_物聯網與網絡

編程與數學 03-002 計算機網絡 18_物聯網與網絡一、物聯網的基本概念&#xff08;一&#xff09;物聯網的架構與層次&#xff08;二&#xff09;物聯網的關鍵技術二、物聯網網絡的構建&#xff08;一&#xff09;物聯網網絡的通信協議&#xff08;二&#xff09;物聯網網絡的拓…

【Kubernetes】ConfigMap配置管理:存儲配置參數,創建到容器掛載

在Kubernetes中&#xff0c;配置管理是應用部署的重要環節。ConfigMap作為存儲非敏感配置數據的資源對象&#xff0c;能幫助我們實現"配置與代碼分離"&#xff0c;讓應用部署更靈活。一、什么是ConfigMap&#xff1f; ConfigMap是Kubernetes中用于存儲非加密配置數據…

Promise和回調地獄

順序執行 vs. 異步操作&#xff1a; 當我們說“順序執行”&#xff0c;通常是指 操作按順序發生。而 異步操作 指的是操作在后臺執行&#xff0c;不會阻塞其他操作&#xff0c;通常會使用回調、Promise 或 async/await 來處理結果。 在 Promise 鏈式調用 的情況下&#xff0c;雖…

LeetCode 65:有效數字

LeetCode 65&#xff1a;有效數字問題本質與挑戰 需判斷字符串是否為有效數字&#xff0c;規則涉及整數、小數、指數&#xff08;e/E&#xff09;的復雜組合&#xff0c;如&#xff1a; 整數&#xff1a;123、-45、678小數&#xff1a;1.2、.3、4.、5.6指數&#xff1a;1e10、2…

數據結構之順序表應用與雙指針法

元素刪除通過元素移動的方式來模擬刪除操作&#xff1a;將指定下標后的所有元素依次向前移動一位&#xff0c;覆蓋要刪除的元素&#xff0c;從而達到 "刪除" 的效果。 通過自定義函數實現刪除功能&#xff0c;需要傳入數組、數組長度的指針&#xff08;因為要修改長度…