欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#自定義控件指示燈效果

 更新時間:2024年09月10日 10:20:12   作者:郭恩碩  
在C#中實現(xiàn)一個指示燈控件,可以通過GDI+技術(shù)繪制,首先使用Pen對象繪制外環(huán),然后用SolidBrush對象填充內(nèi)圓,通過RectangleF定義繪制和填充的邊界,控件的屬性包括顏色、間隙、外環(huán)寬度等,本文給大家介紹C#自定義控件指示燈效果,感興趣的朋友跟隨小編一起看看吧

C#用戶控件之指示燈

在體現(xiàn)通訊狀態(tài)、運行狀態(tài)等用一個靚眼的指示燈如何做?

思路(GDI)

  • 外環(huán)用筆繪制(Pen),內(nèi)圓用畫刷(SolidBrush);

兩個方法(用筆畫圓,用畫刷填充圓的內(nèi)部):

  • 繪制邊界RectangleF定義的橢圓/圓

DrawEllipse(Pen pen,RectangleF rect)

  • 填充RectangleF定義邊框的橢圓的內(nèi)部

FillEllipse(Brush brush,RectangleF rect)

定義屬性

  • 指示燈顏色、外環(huán)與邊界的間隙、內(nèi)圓與邊界的間隙、外環(huán)寬度、當(dāng)前顏色
//外環(huán)寬度
private float outWidth = 4.0f;
[Browsable(true)]
[Category("布局_G")]
[Description("外環(huán)的寬度")]
public float OutWidth
{
    get { return outWidth; }
    set
    {
         if (value <=0||value<0.1*this.Width ) return;
        outWidth = value; this.Invalidate();
    }
}
//顏色(Color)——備注:寫5種顏色屬性(灰色=Gray、棕色=DarkGoldenrod、紅色=Red、藍色=Blue、綠色=limeGreen<比Green好看些>)
private Color zcolor1 = Color.Gray;   //灰色.......寫5種
 [Browsable(true)]
 [Category("布局_G")]
 [Description("顏色1")]
 public Color ZColor1
 {
     get { return zcolor1; }
     set { zcolor1 = value; this.Invalidate(); }
 }
//當(dāng)前顏色獲取(定義一個私有方法)(Int)
  private Color GetCurColor()
  {
      List<Color> colors = new List<Color>();
      colors.Add(zcolor1);
      colors.Add(zcolor2);
      colors.Add(zcolor3);
      colors.Add(zcolor4);
      colors.Add(zcolor5);
      return colors[curValue];
  }
//間隙(float),屬性都是一個樣往下敲就是
注意:間隙設(shè)置值的范圍(外環(huán)間隙要小于內(nèi)圓間隙)

GDI繪制圖形:(外環(huán)、內(nèi)圓)

Color getCurColor = GetCurColor();  //獲取當(dāng)前顏色
//繪制外環(huán)(DrawEllipse-用筆畫橢圓)
p = new Pen(getCurColor, outWidth);
RectangleF rec = new RectangleF(this.gapOut, this.gapOut, this.width - 2 * this.gapOut, this.height - 2 * gapOut);
g.DrawEllipse(p, rec);
//繪制內(nèi)圓(FillEllipse-填充橢圓內(nèi)部)
sb = new SolidBrush(getCurColor);
rec = new RectangleF(gapIn, gapIn, this.width - 2 * this.gapIn, this.height - 2 * gapIn);
g.FillEllipse(sb, rec);

最后生成(閃爍的話,是不是對用戶更友好呢)

兩種閃爍方法

關(guān)鍵在于timer定時器的使用,在定時器的Tick方法中定義變量更替

【1】只內(nèi)圓閃爍(定義內(nèi)圓畫刷顏色Transparent<透明色>、GetCurColor<當(dāng)前色>兩種畫刷)

if (this.flickerAct == true)
{
    if (this.blink == true)  //將blink標(biāo)志位在定時器的Tick方法中取反 (blink=!blink)
    {
        sb = new SolidBrush(zcolor6);  //zcolor6為透明色
    }
    else
    {
        sb = new SolidBrush(getCurColor);  //getCurColor為當(dāng)前色
    }
}
else
{
    sb = new SolidBrush(getCurColor);  //不閃爍就定義當(dāng)前色畫刷
}
rec = new RectangleF(gapIn, gapIn, this.width - 2 * this.gapIn, this.height - 2 * gapIn);
g.FillEllipse(sb, rec);

【2】整體都閃爍(定義控件的Visible)

 private void MyTimer_Tick(object sender, EventArgs e)  //定時器Tick事件方法
 {
     if (this.flickerVis == true)
     {
         //顯隱控件
         this.Visible=!this.Visible;  //整體閃爍只定義Visible即可
         this.blink=false;
     }
     else
     {
         //內(nèi)圓閃爍標(biāo)志
         this.blink = !this.blink;
     }
     this.Invalidate();
 }

【3】頻率可調(diào)(定時器的Interval)

private bool flickerAct = false;
[Browsable(true)]
[Category("布局_G")]
[Description("是否閃爍")]
public bool FlickerAct
{
    get { return flickerAct; }
    set
    {
        if (value == true)
        {
            myTimer.Interval = this.flickerFre;  //傳遞給定時器Interval 一個int(毫秒刷新率)值即可
            this.myTimer.Start();  //閃爍定時器開始
        }
        else
        {
            this.myTimer.Stop();  //不閃爍定時器停止;同時將標(biāo)志位、顯示置為默認值
            this.blink = false;
            this.Visible = true;
        }
        flickerAct = value; this.Invalidate();
    }
}

閃瞎雙眼,捂臉

想要二進制使用示例

  private void led1_Load(object sender, EventArgs e)
  {
      bool b = false;
      //三元運算定義兩種顏色即可
      this.led1.CurValue = b ? 2 : 3; 
  }

到此這篇關(guān)于C#自定義控件—指示燈的文章就介紹到這了,更多相關(guān)C#指示燈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論