最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#自定義控件旋轉(zhuǎn)按鈕功能

 更新時間:2024年09月09日 09:20:42   作者:郭恩碩  
本教程指導如何自定義繪制一個帶有手自動旋轉(zhuǎn)功能的按鈕和帶有標題的面板,教程提供詳細的步驟,方便用戶自定義界面布局,感興趣的朋友跟隨小編一起看看吧

C#用戶控件之旋轉(zhuǎn)按鈕

按鈕功能:手自動旋轉(zhuǎn),標簽文本顯示、點擊二次彈框確認(源碼在最后邊);

【制作方法】

  • 找到控件的中心坐標,畫背景外環(huán)、內(nèi)圓;再繪制矩形開關,進行角度旋轉(zhuǎn)即可獲得;

【關鍵節(jié)點】

  • No.1 獲取中心坐標,思考要繪制圖形的相對坐標、寬度、高度;
  • No.2 更改坐標系原點,以此原點為坐標,繪制矩形開關,再旋轉(zhuǎn)指定角度
//方法中獲取原點
Point centerPoint = GetCenterPoint();
#region 獲取中心原點
private Point GetCenterPoint()
{
    if (this.height > this.width)
    {
        return new Point(this.width / 2, this.width / 2);
    }
    else
    {
        return new Point(this.height / 2, this.height / 2);
    }
}
#endregion
//更改坐標系原點
g.TranslateTransform(centerPoint.X, centerPoint.Y);
//旋轉(zhuǎn)指定角度
if (switchStatus)
{
    g.RotateTransform(36.0f);
}
else
{
    g.RotateTransform(-36.0f);
}

【1】按鈕的背景(外環(huán)<g.DrawEllipse>、內(nèi)圓<g.FillEllipse>)繪制方法與指示燈的方法一樣;

注意:此坐標系以控件左上角為準

//繪制外環(huán)—(Pen)-DrawEllipse
p = new Pen(this.cirInColor, this.cirOutWidth);
RectangleF rec = new RectangleF(this.cirOutGap, this.cirOutGap, (centerPoint.X - this.cirOutGap) * 2, (centerPoint.X - this.cirOutGap) * 2);
g.DrawEllipse(p, rec);
//填充內(nèi)圓—(SolidBrush)-FillEllipse
sb = new SolidBrush(this.cirInColor);
rec = new RectangleF(this.cirInGap, this.cirInGap, (centerPoint.X - this.cirInGap) * 2, (centerPoint.X - this.cirInGap) * 2);
g.FillEllipse(sb, rec);

【2】繪制中間矩形及圓點,畫刷填充指定區(qū)域(g.FillRectangle、g.FillEllipse)

注意:此坐標系以中心點為準

//更改坐標系原點
g.TranslateTransform(centerPoint.X, centerPoint.Y);
//填充矩形開關
rec = new RectangleF(-this.togWidth * 0.5f, this.togGap - centerPoint.Y, togWidth, (centerPoint.Y - togGap) * 2);
g.FillRectangle(new SolidBrush(this.togColor), rec);
//填充矩形開關圓點
rec = new RectangleF(-this.togWidth * 0.5f + togForeGap, this.togGap - centerPoint.Y + togForeGap, togWidth - 2 * togForeGap, togForeHeight);
g.FillEllipse(new SolidBrush(this.togForeColor), rec);

【3】繪制文本,在指定的矩形中繪制指定的字符串(g.DrawString)

//指定字符串
rec = new RectangleF(this.width * 0.05f, 1, this.width, 20);
g.DrawString(this.textLeft, this.textFont, new SolidBrush(this.textColor), rec, sf);
rec = new RectangleF(this.width * 0.63f, 1, this.width, 20);
g.DrawString(this.textRight, this.textFont, new SolidBrush(this.textColor), rec, sf);

【4】創(chuàng)建鼠標點擊事件,添加鼠標點擊事件處理<更改屬性值>,在屬性中觸發(fā)事件(Event)

#region 添加事件
[Browsable(true)]
[Category("操作_G")]
[Description("雙擊進入事件")]
public event EventHandler MouseDown_G;   //事件聲明
//初始化函數(shù)添加鼠標點擊事件處理
this.MouseDown += Switch_MouseDown; ;
//鼠標點擊事件處理邏輯
private void Switch_MouseDown(object sender, MouseEventArgs e)
{
    DialogResult dr = MessageBox.Show("二次確認操作?", "提示您", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
    if (dr == DialogResult.OK)
    {
        SwitchStatus = !SwitchStatus; //此處屬性值,不是字段
    }
    else return;
}
#endregion
//開關狀態(tài)屬性
 private bool switchStatus = false;
 [Browsable(true)]
 [Category("布局_G")]
 [Description("開關狀態(tài)")]
 public bool SwitchStatus
 {
     get { return switchStatus; }
     set
     {
         switchStatus = value; this.Invalidate();
         //激活觸發(fā)事件
         this.MouseDown_G?.Invoke(this, null);
     }
 }

備忘:指定默認事件(在應用時點擊鼠標即可進入自定義事件,否則進入‘load’事件)

[DefaultEvent("MouseDown_G")]

最后生成

下一個:一個標題面板,方便用戶界面的布局

【1】新建用戶組件

【2】更改組件繼承為Panel

【3】定義屬性(標題的顏色、字體、高度;抬頭背景色;邊框顏色)

private Font titleFont = new Font("微軟雅黑", 12);
[Browsable(true)]
[Category("布局_G")]
[Description("標題字體")]
public Font TitleFont
{
    get { return titleFont; }
    set
    {
        titleFont = value;
        this.Invalidate();
    }
}

【4】重繪畫布

//畫外邊框
g.DrawRectangle(new Pen(this.colorBorder), new Rectangle(0, 0, this.Width - 1, this.Height - 1));
//填充抬頭矩形
RectangleF rec = new RectangleF(0.5f, 0.5f, this.Width - 2, this.titleHeight);
g.FillRectangle(new SolidBrush(this.colorBack), rec);
//文本繪制
g.DrawString(this.titleText, this.titleFont, new SolidBrush(this.colorTitle), rec, sf);

【5】備注說明

  • 初始化字體格式-需要再兩個方法中定義文本對齊格式
//字體對齊格式
this.sf = new StringFormat();
this.sf.Alignment = StringAlignment.Center;
this.sf.LineAlignment = StringAlignment.Center;
//指定控件大小
this.Size = new System.Drawing.Size(300, 150);

最后生成并應用

源碼鏈接

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

相關文章

  • Audio Source組件及相關API

    Audio Source組件及相關API

    這篇文章主要介紹了Audio Source組件及相關API的相關知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • WPF中窗體最大化問題的解決方法

    WPF中窗體最大化問題的解決方法

    這篇文章主要給大家介紹了關于WPF中窗體最大化問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用wpf具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • C#隊列Queue多線程用法實例

    C#隊列Queue多線程用法實例

    這篇文章主要介紹了C#隊列Queue多線程用法,實例分析了隊列的相關使用技巧,需要的朋友可以參考下
    2015-05-05
  • C#?模式匹配完全指南

    C#?模式匹配完全指南

    模式匹配是一種高端的使用機制,它允許程序員在開發(fā)的時候以對象的類型作為條件篩選和分情況處理的一種手段,本文給大家介紹C#?模式匹配完全指南,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • C#繪制時鐘的方法

    C#繪制時鐘的方法

    這篇文章主要為大家詳細介紹了C#繪制時鐘的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • c#使用file.copy實現(xiàn)文件備份示例

    c#使用file.copy實現(xiàn)文件備份示例

    需要把D盤Source文件夾中的所有名稱包含"LTE"的子文件夾Copy到E盤的Backup文件中,實現(xiàn)特定文件夾每天備份,下面使用file.copy實現(xiàn)一下這個功能
    2014-03-03
  • C#中讀取硬件溫度的3種方法對比

    C#中讀取硬件溫度的3種方法對比

    這篇文章主要為大家詳細介紹了C#中讀取硬件溫度的3種方法對比,文中的示例代碼簡潔易懂,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2025-09-09
  • c#對xml增刪改查操作示例

    c#對xml增刪改查操作示例

    本文主要介紹c#對xml增刪改查操作的示例,大家參考使用吧
    2014-01-01
  • C#連接Oracle的方法實例總結(jié)

    C#連接Oracle的方法實例總結(jié)

    這篇文章主要介紹了C#連接Oracle的方法,結(jié)合實例形式總結(jié)分析了幾種常見的C#連接Oracle數(shù)據(jù)庫的操作技巧與相關注意事項,需要的朋友可以參考下
    2017-06-06
  • c#實現(xiàn)把漢字轉(zhuǎn)為帶田字格背景的jpg圖片

    c#實現(xiàn)把漢字轉(zhuǎn)為帶田字格背景的jpg圖片

    這篇文章主要介紹了c#實現(xiàn)把漢字轉(zhuǎn)為帶田字格背景的jpg圖片示例,需要的朋友可以參考下
    2014-03-03

最新評論

乡城县| 泸定县| 黄大仙区| 景谷| 文山县| 大英县| 枣阳市| 仪征市| 贵南县| 和田县| 仪征市| 武陟县| 兴和县| 新泰市| 开原市| 佛教| 高雄县| 合江县| 徐州市| 海宁市| 柳河县| 双桥区| 上林县| 崇明县| 新龙县| 体育| 香格里拉县| 青铜峡市| 惠安县| 昌都县| 枣阳市| 将乐县| 达拉特旗| 雷波县| 祁门县| 孝感市| 德庆县| 沙坪坝区| 卢湾区| 玉屏| 屯昌县|