下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于c#的自制控件:Button 摘要: 關鍵詞:c#;button;usercontrol 一、概述:有時Visual Studio提供的控件不能滿足用戶的需求,此時我們可以去購買第三方控件,但是一些簡單的控件我們完全可以自己制作出來,接下來,我們將自己動手制作一個圓形的button控件,它實現(xiàn)了button控件所需要具有的幾乎全部特性。Control是定義控件的基類,控件是帶有可視化表示形式的組件。所以我們讓RoundButton繼承自Control,
2、且實現(xiàn)IButtonControl接口,IButtonControl接口將允許控件在窗體上的作用就像按鈕一樣。類關系圖如圖1-1所示。 圖1-1 圖1-2 圖1-3 圖1-4
3、 代碼實現(xiàn):1. 字段的設置public class RoundButton : Control, IButtonControl private ButtonState myButtonState; private DialogResult
4、myDialogResult; private bool IsDefault get; set; /.other method2. Button外觀的的繪制 protected override void OnPaint(PaintEventArgs e) base.OnPaint(e);
5、0; PaintStandart(e.Graphics); private void PaintStandart(Graphics g) g.SmoothingMode = SmoothingMode.AntiAlias;/指定消除鋸齒的呈現(xiàn)。
6、; Rectangle rect = new Rectangle(2, 2, this.Width - 4, this.Height - 4); if (this.Focused) rect.Inflate(-2, -2); DrawFocus(g);
7、160; PaintButtonBackGround(); Draw3DBorder(rect, g); DrawText(rect, g); private void PaintButtonBack
8、Ground() GraphicsPath myPath = new GraphicsPath(); myPath.AddEllipse(0, 0, this.Width, this.Height); Region myRegion = new Region(myPath);
9、0; this.Region = myRegion; private void Draw3DBorderPushed(Rectangle rect, Graphics g) using (Pen myPen = new Pen(SystemColors.ControlDarkDark, 3)
10、160; g.DrawEllipse(myPen, rect); private void Draw3DBorder(Rectangle rect, Graphics g)
11、; if (myButtonState = ButtonState.Pushed) Draw3DBorderPushed(rect, g); else Draw3DBorderNormal(rect, g);
12、60; private void Draw3DBorderNormal(Rectangle rect, Graphics g) LinearGradientBrush myBrush = new LinearGradientBrush(rect, Col
13、or.White, Color.Black, LinearGradientMode.ForwardDiagonal); using (Pen myPen = new Pen(myBrush, 3) &
14、#160; g.DrawEllipse(myPen, rect); private void DrawFocus(Graphics g) Rectangle myRect =
15、; new Rectangle(1, 1, this.Width - 2, this.Height - 2); using (Pen myPen = new Pen(Color.Black) g.DrawEllipse(myPen, myRect);
16、160; private void DrawText(Rectangle rect, Graphics g) StringFormat myFormat = new StringFormat(); myFormat.Alignment = StringA
17、lignment.Center; myFormat.LineAlignment = StringAlignment.Center; if (this.Enabled) rect.Offset(1, 1);
18、; g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), rect, myFormat); else
19、160; rect.Offset(1, 1); g.DrawString(this.Text, this.Font, new SolidBrush(Color.White), rect, myFormat);
20、160; rect.Offset(-1, -1); g.DrawString(this.Text, this.Font, new SolidBrush(SystemColors.GrayText), rect, myFormat);
21、0; 3. IButtonControl接口的實現(xiàn) Category(""Behavior""), DefaultValue(DialogResult.None) public virtual DialogResult DialogResult
22、 get return myDialogResult; setmyDialogResult = value; public void NotifyDefault(bool value) if (this.IsDefault != value) this.IsDefault = value; if (this.IsDe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)陽光房設計與施工一體化協(xié)議版A版
- 專用商標使用許可協(xié)議版B版
- 專業(yè)SaaS服務提供商協(xié)議范本(2024修訂版)版B版
- 專項咨詢與解決方案服務協(xié)議版B版
- 二零二四全新旅游服務雙向保密協(xié)議下載與體驗合同3篇
- 二零二五年度綠色能源項目補充合同協(xié)議書2篇
- 2025年度城市綜合體戶外廣告位及攤位聯(lián)合租賃合同4篇
- 2025年休閑娛樂場地租賃合作協(xié)議書4篇
- 2025年度綠色能源項目場地承包經(jīng)營合同范本4篇
- 二零二五年度自然人互聯(lián)網(wǎng)金融消費合同3篇
- 2025年度土地經(jīng)營權流轉(zhuǎn)合同補充條款范本
- 南通市2025屆高三第一次調(diào)研測試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數(shù)學一模試卷
- 2025中國人民保險集團校園招聘高頻重點提升(共500題)附帶答案詳解
- 0的認識和加、減法(說課稿)-2024-2025學年一年級上冊數(shù)學人教版(2024)001
- 醫(yī)院安全生產(chǎn)治本攻堅三年行動實施方案
- 法規(guī)解讀丨2024新版《突發(fā)事件應對法》及其應用案例
- Python試題庫(附參考答案)
- 大斷面隧道設計技術基本原理
- 41某31層框架結構住宅預算書工程概算表
- 成都市國土資源局關于加強國有建設用地土地用途變更和
評論
0/150
提交評論