国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Winform自定義控件 —— 指示燈

這篇具有很好參考價(jià)值的文章主要介紹了Winform自定義控件 —— 指示燈。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

? ? ? ??在開(kāi)始閱讀本文之前,如果您有學(xué)習(xí)創(chuàng)建自定義控件庫(kù)并在其他項(xiàng)目中引用的需求,請(qǐng)參考:在Visual Studio中創(chuàng)建自定義Winform控件庫(kù)并在其他解決方案中引用https://blog.csdn.net/YMGogre/article/details/126508042


目錄

1、應(yīng)用場(chǎng)景:?

1.1、本文的應(yīng)用場(chǎng)景:?

2、所需資源:?

3、源代碼:?

4、使用方法:?

5、效果演示:


1、應(yīng)用場(chǎng)景:?

  • 當(dāng)我們需要在窗口上通過(guò)一個(gè)指示燈來(lái)表示一個(gè)硬件設(shè)備或者程序的運(yùn)行狀態(tài)時(shí);
  • 當(dāng)我們需要一個(gè)可以顯示不同顏色的指示燈來(lái)表征硬件設(shè)備或程序不同的狀態(tài)時(shí);
  • 當(dāng)我們需要指示燈可以對(duì)用戶的"點(diǎn)擊"之類(lèi)的交互做出響應(yīng)時(shí);?

1.1、本文的應(yīng)用場(chǎng)景:?

? ? ? ? 此控件設(shè)計(jì)初衷是:采用一個(gè)四色指示燈來(lái)表示某件事情的執(zhí)行狀態(tài)。共設(shè)置有四個(gè)狀態(tài):"waiting(等待中)"、"underway(正在進(jìn)行)"、"completed(已完成)"、"pick(選中)"。分別通過(guò)四種顏色來(lái)表征:"DimGray(暗灰色)"、"Cornsilk(玉米絲色)"、"Aquamarine(碧綠色)"、"Coral(珊瑚色)"。

????????此外,如果我們對(duì)某些"已完成"的事件不滿意,我們可以選中那些事件對(duì)應(yīng)的指示燈,以方便程序?qū)ξ覀冞x中的事件做后續(xù)操作:

????????我們可以通過(guò)鼠標(biāo)點(diǎn)擊選中"已完成"狀態(tài)下的指示燈,此時(shí)指示燈狀態(tài)會(huì)改為"選中",當(dāng)然也可以取消選中;而其他狀態(tài)下的指示燈無(wú)法被選中。?

2、所需資源:?

(無(wú))?

3、源代碼:?

/* IndicatorLight.cs */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

//注意命名空間修改為自己項(xiàng)目的命名空間
namespace WindowsFormsControlLibraryMadeByXJY
{
    public partial class IndicatorLight : UserControl
    {
        private bool _Light_clickable = true;
        private string _Light_text = "";
        private int Curr_StatusCode;        //當(dāng)前狀態(tài)編碼
        private enum Light_States
        {
            waiting = 0,
            underway,
            completed,
            pick
        }
        private string[] Get_Status = new string[] { "waiting", "underway", "completed", "pick" };

        private Color Curr_Color;           //當(dāng)前顏色
        private Color[] lightColors = new Color[] {Color.DimGray, Color.Cornsilk, Color.Aquamarine, Color.Coral};


        /// <summary>
        /// 自定義的text屬性
        /// </summary>
        [Category("Text"), Description("文本框里的提示文字"), Browsable(true)]
        public string Light_text
        {
            get { return _Light_text; }
            set
            {
                if (value == null) throw new ArgumentNullException("value");

                _Light_text = value;
                this.Invalidate();
            }
        }

        /// <summary>
        /// 設(shè)置指示燈是否可以被點(diǎn)擊,這取決于你是否想要指示燈對(duì)用戶交互作出反應(yīng)
        /// </summary>
        public bool Light_clickable
        {
            get { return _Light_clickable; }
            set
            {
                _Light_clickable = value;
            }
        }

        /// <summary>
        /// 設(shè)置四色燈狀態(tài),暗灰色表示"等待中";玉米絲色表示"進(jìn)行中";碧綠色表示"已完成";珊瑚色表示"選中"
        /// 可以自行添加更多的case來(lái)給指示燈添加更多的顏色以及這些顏色對(duì)應(yīng)的狀態(tài);
        /// 這需要你:1、在Light_States添加你想使用指示燈來(lái)表示的狀態(tài)項(xiàng);
        ///           2、在Get_Status中同樣添加你想使用指示燈來(lái)表示的狀態(tài)項(xiàng);
        ///           3、在lightColors中添加你想用于表征該狀態(tài)的顏色。
        /// </summary>
        /// <param name="s">狀態(tài):"waiting"表示"等待中";"underway"表示"進(jìn)行中";"completed"表示"已完成";"pick"表示"選中";以上都不是則默認(rèn)進(jìn)入"waiting"狀態(tài)</param>
        public void SetStatus(string s)
        {
            switch (s)
            {
                case "waiting":
                    Curr_StatusCode = (int)Light_States.waiting;
                    break;
                case "underway":
                    Curr_StatusCode = (int)Light_States.underway;
                    break;
                case "completed":
                    Curr_StatusCode = (int)Light_States.completed;
                    break;
                case "pick":
                    Curr_StatusCode = (int)Light_States.pick;
                    break;
                default:        //對(duì)于其他輸入均默認(rèn)進(jìn)入"等待中"狀態(tài)
                    Curr_StatusCode = (int)Light_States.waiting;
                    break;
            }
            try
            {
                Curr_Color = lightColors[Curr_StatusCode];
                this.Invalidate();
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        /// <summary>
        /// 獲取信號(hào)燈狀態(tài),根據(jù)當(dāng)前狀態(tài)返回對(duì)應(yīng)的字符串(比如當(dāng)前狀態(tài)為"waiting",則返回"waiting")
        /// </summary>
        public string GetStatus
        {
            get { return Get_Status[Curr_StatusCode]; }
        }

        /// <summary>
        /// 重置信號(hào)燈狀態(tài)為"waiting"
        /// </summary>
        public void ResetState()
        {
            this.SetStatus("waiting");
        }

        public IndicatorLight()
        {
            InitializeComponent();
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.DoubleBuffer, true);
            this.SetStyle(ControlStyles.ResizeRedraw, true);
            this.SetStyle(ControlStyles.Selectable, true);
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            this.SetStyle(ControlStyles.UserPaint, true);
            this.Cursor = Cursors.Hand;   
            this.Size = new Size(50, 50);
            Curr_StatusCode = (int)Light_States.waiting;
            Curr_Color = lightColors[Curr_StatusCode];
        }

        /// <summary>
        /// 重繪控件
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = e.Graphics;
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.DrawEllipse(new Pen(new SolidBrush(Color.Blue),2), new Rectangle(4, 4, this.Width - 8, this.Height - 8));
            g.FillEllipse(new SolidBrush(Curr_Color), new Rectangle(4, 4, this.Width - 8, this.Height - 8));           
            TextRenderer.DrawText(g, Light_text, this.Font, new Rectangle(4, 4, this.Width - 8, this.Height - 8), SystemColors.InfoText);
        }


        /// <summary>
        /// 處理四色燈控件的SizeChanged事件中針對(duì)只調(diào)整單邊大小的情況。
        /// </summary>
        /// <param name="sender">事件的來(lái)源</param>
        /// <param name="e">The <see cref="EventArgs"/>包含事件數(shù)據(jù)的實(shí)例</param>
        void UCSignalLamp_SizeChanged(object sender, EventArgs e)
        {
            this.Height = this.Width;
        }



        /// <summary>
        /// 是否選中,當(dāng)該控件狀態(tài)為"已完成"時(shí),點(diǎn)擊該控件會(huì)將狀態(tài)修改為"選中",當(dāng)然再次點(diǎn)擊可以取消選中。對(duì)于其他狀態(tài)("等待中"、"進(jìn)行中")則不做動(dòng)作。
        /// 注意:當(dāng)且僅當(dāng)用戶設(shè)置 Light_clickable = true 時(shí)該事件處理代碼才會(huì)得到執(zhí)行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lightClick(object sender, EventArgs e)
        {
            if (_Light_clickable)
            {
                if (this.Curr_StatusCode == (int)Light_States.completed)
                {
                    this.SetStatus("pick");         //選中
                }
                else if(this.Curr_StatusCode == (int)Light_States.pick)
                {
                    this.SetStatus("completed");    //取消選中
                }
                else { }
            }
        }
    }
}
/* IndicatorLight.Designer.cs */

//注意命名空間修改為自己項(xiàng)目的命名空間
namespace WindowsFormsControlLibraryMadeByXJY
{
    partial class IndicatorLight
    {
        /// <summary> 
        /// 必需的設(shè)計(jì)器變量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary> 
        /// 清理所有正在使用的資源。
        /// </summary>
        /// <param name="disposing">如果應(yīng)釋放托管資源,為 true;否則為 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region 組件設(shè)計(jì)器生成的代碼

        /// <summary> 
        /// 設(shè)計(jì)器支持所需的方法 - 不要修改
        /// 使用代碼編輯器修改此方法的內(nèi)容。
        /// </summary>
        private void InitializeComponent()
        {
            components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Click += new System.EventHandler(this.lightClick);
            this.SizeChanged += new System.EventHandler(this.UCSignalLamp_SizeChanged);
        }

        #endregion
    }
}

4、使用方法:?

  • 在代碼中通過(guò)設(shè)置該類(lèi)實(shí)例化對(duì)象的Cursor屬性可以更改鼠標(biāo)指針位于控件上時(shí)顯示的光標(biāo);
    /* 假設(shè)我們有一個(gè) IndicatorLight1 對(duì)象 */
    IndicatorLight1.Cursor = Cursors.Arrow;
    ...
    
  • 通過(guò)設(shè)置Light_clickable屬性可以更改該控件是否可以被點(diǎn)擊;
    IndicatorLight1.Light_clickable = false;
    IndicatorLight1.Light_clickable = true;
  • 通過(guò)調(diào)用SetStatus()方法可以修改指示燈的狀態(tài)(外部表現(xiàn)為顏色發(fā)生改變);
    IndicatorLight1.SetStatus("underway");
    IndicatorLight1.SetStatus("completed");
    ...
  • 通過(guò)獲取GetStatus屬性可以使用指示燈狀態(tài)做一些簡(jiǎn)單的判斷操作;
    if (IndicatorLight1.GetStatus == "pick")
    {
        ...
    }

5、效果演示:?

?Winform自定義控件 —— 指示燈文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-444471.html

到了這里,關(guān)于Winform自定義控件 —— 指示燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • IBM服務(wù)器指示燈報(bào)警說(shuō)明

    ps ? 指示燈:當(dāng)此指示燈發(fā)亮?xí)r,表明電源2 出現(xiàn)故障。 temp 指示燈:當(dāng)此指示燈發(fā)亮?xí)r,表明系統(tǒng)溫度超出閾值級(jí)別。 fan:當(dāng)此指示燈點(diǎn)亮?xí)r,表明散熱風(fēng)扇或電源風(fēng)扇出現(xiàn)故障或運(yùn)行太慢。風(fēng)扇發(fā)生故障還會(huì)導(dǎo)致over temp 指示燈發(fā)亮。 link指示燈:當(dāng)此指示燈發(fā)亮?xí)r,網(wǎng)卡

    2024年03月09日
    瀏覽(27)
  • 服務(wù)器指示燈功能解析和代碼示例

    服務(wù)器指示燈是服務(wù)器硬件上的小燈,用于顯示服務(wù)器的狀態(tài)和運(yùn)行情況。這些指示燈通常位于服務(wù)器前面板或后面板上,并根據(jù)不同的顏色和閃爍模式來(lái)表示不同的狀態(tài)。在本文中,我們將詳細(xì)解析服務(wù)器指示燈的功能,并提供一些示例代碼來(lái)控制這些指示燈。 服務(wù)器指示

    2024年02月20日
    瀏覽(24)
  • 電腦指示燈閃爍,但是無(wú)法開(kāi)機(jī)的解決方案

    設(shè)備型號(hào):聯(lián)想 ThinkPad T14s 故障詳情 :電腦使用后未關(guān)機(jī)鎖屏合蓋后,再次使用時(shí)開(kāi)關(guān)機(jī)指示燈一直閃爍,但是無(wú)法正常開(kāi)機(jī)。 其他嘗試方法:嘗試過(guò)長(zhǎng)按開(kāi)關(guān)機(jī)按鍵(無(wú)效),也聽(tīng)從聯(lián)想維修客服指導(dǎo) 長(zhǎng)按15秒開(kāi)關(guān)機(jī)按鍵 反復(fù)3次,仍舊無(wú)果! 有效解決方法 :ThinkPad背板

    2024年02月01日
    瀏覽(19)
  • linux 網(wǎng)卡網(wǎng)口指示燈閃爍指令 centos 7

    linux 網(wǎng)卡網(wǎng)口指示燈閃爍指令 centos 7

    現(xiàn)場(chǎng)交付項(xiàng)目的時(shí)候,經(jīng)常出現(xiàn)網(wǎng)口順序和網(wǎng)卡位置混亂的情況,這時(shí)可以用linux指令,使某個(gè)網(wǎng)卡的網(wǎng)口燈閃爍,以此來(lái)找到對(duì)應(yīng)關(guān)系。 ethtool -p eth0 30? 會(huì)讓 eth0對(duì)應(yīng)的物理網(wǎng)卡閃燈30秒 ,以此來(lái)判斷哪塊網(wǎng)卡是eth0,eth1 eth2等同理 比如這張圖片紅色箭頭所指的位置,這個(gè)網(wǎng)

    2024年02月12日
    瀏覽(22)
  • 單片機(jī)原理及應(yīng)用 實(shí)驗(yàn)三 指示燈循環(huán)控制

    單片機(jī)原理及應(yīng)用 實(shí)驗(yàn)三 指示燈循環(huán)控制

    單片機(jī)原理及應(yīng)用(C51語(yǔ)言版) 實(shí)驗(yàn)三 指示燈循環(huán)控制 實(shí)驗(yàn)功能如下: 實(shí)現(xiàn)8個(gè)LED燈依次點(diǎn)亮的功能:P0.0→P0.1→P0.2→P0.3→ ┅ →P0.7→P0.6→P0.5→ ┅ →P0.0的順序,無(wú)限循環(huán),間隔約50ms。 環(huán)境配置: Proteus 7;Keil 步驟: 1.根據(jù)實(shí)驗(yàn)要求繪制電路圖。 ? 繪制時(shí)(1)選擇并擺放

    2023年04月23日
    瀏覽(92)
  • 寬帶貓指示燈各個(gè)的含義及日常問(wèn)題解答

    如今很多家庭依然還是采用貓撥號(hào)上網(wǎng),盡管貓一般也很少壞,但又時(shí)候也容易出各種網(wǎng)絡(luò)問(wèn)題,我們可以通過(guò)貓上面的指示燈來(lái)判斷大致的問(wèn)題,以下一起來(lái)看看貓指示燈的含義與常見(jiàn)問(wèn)題解答。 熱點(diǎn)相關(guān):什么是貓(modem) 貓和路由器連接方法 貓指示燈的含義與常見(jiàn)問(wèn)

    2024年02月05日
    瀏覽(27)
  • 如何通過(guò)無(wú)線路由故障指示燈查看故障發(fā)生在什么地方

    當(dāng)無(wú)線路由器發(fā)生故障時(shí),我們可以從控制面板上的指示燈狀態(tài),來(lái)判斷故障發(fā)生在什么地方,本篇以騰達(dá)無(wú)線路由器介紹無(wú)線路由器故障時(shí)各種指示燈的狀態(tài),從分析這些燈的閃亮就可以判斷是哪里出現(xiàn)問(wèn)題了。 1、ADSL的Power燈 :電源顯示,正常應(yīng)長(zhǎng)亮,不亮則表明沒(méi)有通

    2024年02月05日
    瀏覽(20)
  • Qt+C++跑馬燈-指示燈-風(fēng)扇-虛線燈帶-動(dòng)畫(huà)仿真

    Qt+C++跑馬燈-指示燈-風(fēng)扇-虛線燈帶-動(dòng)畫(huà)仿真

    程序示例精選 Qt+C++跑馬燈-指示燈-風(fēng)扇-虛線燈帶-動(dòng)畫(huà)仿真 如需安裝運(yùn)行環(huán)境或遠(yuǎn)程調(diào)試,見(jiàn)文章底部個(gè)人 QQ 名片,由專(zhuān)業(yè)技術(shù)人員遠(yuǎn)程協(xié)助! 這篇博客針對(duì)Qt+C++跑馬燈-指示燈-風(fēng)扇-虛線燈帶-動(dòng)畫(huà)仿真編寫(xiě)代碼,代碼整潔,規(guī)則,易讀。 學(xué)習(xí)與應(yīng)用推薦首選。 一、所需工

    2024年02月12日
    瀏覽(29)
  • 【學(xué)習(xí)記錄】STM32中斷進(jìn)階任務(wù):按鍵控制指示燈閃爍頻率

    【學(xué)習(xí)記錄】STM32中斷進(jìn)階任務(wù):按鍵控制指示燈閃爍頻率

    采用德飛萊STM32板,主控芯片STM32F103ZET6。 任務(wù)內(nèi)容 :利用按鍵B1控制指示燈LD2的閃爍頻率,閃爍頻率設(shè)置為3檔:初始狀態(tài)時(shí),LD2按照2Hz的頻率閃爍;第一次按鍵后,LD2按照10 Hz的頻率閃爍;第二次按鍵后,LD2按照20Hz的頻率閃爍。再次按鍵后讓LD2恢復(fù)以2Hz的頻率閃爍,并重復(fù)

    2024年02月07日
    瀏覽(54)
  • 【學(xué)習(xí)記錄】STM32利用定時(shí)器中斷實(shí)現(xiàn)定時(shí)閃爍指示燈

    【學(xué)習(xí)記錄】STM32利用定時(shí)器中斷實(shí)現(xiàn)定時(shí)閃爍指示燈

    任務(wù):定時(shí)閃爍指示燈 任務(wù)目標(biāo): 掌握 CubeMX 軟件配置定時(shí)器實(shí)現(xiàn)定時(shí)功能的方法。 任務(wù)內(nèi)容: 控制開(kāi)發(fā)板上的指示燈LED每隔1s閃爍。 任務(wù)實(shí)現(xiàn): 使用的STM32芯片是STM32F407ZET6 第一步:設(shè)置高速時(shí)鐘,設(shè)置LED 第二步:配置TIM10時(shí)鐘為100MHz,故可以設(shè)置預(yù)分頻系數(shù)PSC為9999,自

    2024年02月05日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包