C# 自訂控制項VS使用者控制項

來源:互聯網
上載者:User

標籤:控制項陳列庫   實現   bsp   datetime   open   添加   修改   技術   close   

1 自訂控制項與使用者控制項區別

WinForm中,

使用者控制項(User Control):繼承自 UserControl,主要用於開發 Container 控制項,Container控制項可以添加其他Controls控制項

自訂控制項(Custom Control):繼承自 Control,主要用於開發windows控制項的最基本的類,比如 Text,Button 控制項

 

2 要開發自己的控制項的幾種方法[1]

複合控制項(Composite Controls):將現有的各種控制群組合起來,形成一個新的控制項,來滿足使用者的需求。?

擴充控制項(Extended Controls):就是在現有的控制項基礎上,派生出一個新的控制項,增加新的功能,或者修改原有功能,來滿足使用者需求。

自訂控制項(Custom Controls):就是直接從System.Windows.Forms.Control類派生,也就是說完全由自己來設計、實現一個全新的控制項,這是最靈活、最強大的方法,但是,對開發人員的要求也是最高的。要實現一個自訂控制項,必須為Control類的的OnPaint事件編寫代碼,在OnPaint事件中實現自訂控制項的繪製工作。同時,還可以重寫Control類的WndProc方法,來處理底層的Windows訊息。所以說,要實現一個自訂控制項,對開發人員的要求較高,要求開發人員必須瞭解GDI+和Windows API的知識。

3 樣本:Clock User Control[1]

原始碼

Steps:

1. 建立一個Windows控制項陳列庫項目(從UserControl派生)

2. 添加一個Timer控制項,並設定屬性(Enable=True, Interval=1000)和事件 (Ticker=Time1_Tick)

1         private void timer1_Tick(object sender, EventArgs e)2         {3             this.Time = DateTime.Now;4             Refresh();            5         }

3. 重寫OnPaint事件,繪製使用者介面

圖1 重寫OnPaint事件,繪製使用者介面

 1         #region draw clock 2         private void UserClock_Paint(object sender, PaintEventArgs e) 3         { 4             Graphics dc = e.Graphics; 5             Pen pn = new Pen(ForeColor); 6             SolidBrush br = new SolidBrush(ForeColor); 7             initCoordinates(dc);   8             DrawDots(dc, br); 9             DrawHourHand(dc, pn);10             DrawSecondHand(dc, pn);11             DrawMinuteHand(dc, pn);12         }13         14         public void initCoordinates(Graphics dc)15         {16             if (this.Width == 0 || this.Height == 0) return;17             dc.TranslateTransform(this.Width / 2, this.Height / 2);18             dc.ScaleTransform(this.Height / 250F, this.Width / 250F);19         }20         public void DrawDots(Graphics dc, Brush brush)21         {22             int iSize;23             for (int i = 0; i <= 59; i++)24             {25                 if (i % 5 == 0)26                 {27                     iSize = 15;28                 }29                 else30                 {31                     iSize = 5;32                 }33                 dc.FillEllipse(brush, -iSize / 2, -100 - iSize / 2, iSize, iSize);34                 dc.RotateTransform(6);35             }36         }37         public virtual void DrawHourHand(Graphics grfx, Pen pn)38         {39             GraphicsState gs = grfx.Save();40             grfx.RotateTransform(360.0F * Time.Hour / 12 + 30.0F * Time.Minute / 60);41             grfx.DrawLine(pn, 0, 0, 0, -50);42             grfx.Restore(gs);43         }44         public virtual void DrawMinuteHand(Graphics grfx, Pen pn)45         {46             GraphicsState gs = grfx.Save();47             grfx.RotateTransform(360.0F * Time.Minute / 60 + 6.0F * Time.Second / 60);48             grfx.DrawLine(pn, 0, 0, 0, -70);49             grfx.Restore(gs);50         }51         public virtual void DrawSecondHand(Graphics grfx, Pen pn)52         {53             GraphicsState gs = grfx.Save();54             grfx.RotateTransform(360.0F * Time.Second / 60);55             grfx.DrawLine(pn, 0, 0, 0, -100);56             grfx.Restore(gs);57         }58         #endregion
View Code

4. 產生使用者控制項

5. 測試使用者控制項

建立WinForm應用程式,在Toolbox添加Tab "User Control",再往其中拖入第4步中產生的自訂控制項的dll檔案。再把Toolbox中的使用者控制項“UserControlClock”拖到介面“Form1”中,如所示。

C# 自訂控制項VS使用者控制項

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.