使用C#開發使用者控制(轉)

來源:互聯網
上載者:User
控制 使用C#開發使用者控制

西南通訊研究所 汪漢波  
01-9-7 下午 01:21:57
--------------------------------------------------------------------------------
C#是微軟推出的新一代程式設計語言,用於開發.net架構下的應用。C#從C/C++演變而來,但是比C/C++更加簡單、安全。下面,我們通過用C#開發一個百分比控制來示範一下它的功能。
首先,準備好開發環境,啟動Visual Studio.net Beta2,選擇菜單檔案->建立->項目,項目類型選擇Visual C#項目,模板選擇Windows控制項陳列庫,名稱輸入Percent,按確定,建立一個項目。
切換到Percent.cs[設計]頁面,在方案總管中將UserControl1.cs改為Percent.cs。從工具箱中拖一個Label控制到設計面板上,設定該Label的屬性:Name: lbPercent,BackColor: Transparent,Text: 100%,並拖拉Label的邊框,使其大小能剛好顯示出Text。右鍵在設計面板上單擊,從快顯功能表中選擇查看代碼,開啟代碼編輯頁面。
可以看到名字空間為Percent,將游標移動到public class Percent : System.Windows.Forms.UserControl以下,輸入下面幾行:
private int iCurPercent = 0;
private Color clPercent = Color.Blue;
private Color clText = Color.Black;
以上定義並初始化了幾個私人變數,iCurPercent表示當前的百分比進度,clPercent為進度的顏色,clText為中間顯示的百分比文本的顏色。
本控制擁有三個屬性,分別設定進度條和文字的顯示顏色,以及當前進度。還定義了一個OnPercentChange事件,在百分比改變時觸發該事件。
在protected override void Dispose( bool disposing )後面添加以下內容:
public delegate void PercentChangeHandler(int CurrentPercent);
public event PercentChangeHandler OnPercentChange;

public int CurrentPercent
{
get
{
return iCurPercent;
}
set
{
if ((value <= 100) && (value >= 0))
{
iCurPercent = value;
if (OnPercentChange != null)
OnPercentChange(iCurPercent);
this.Invalidate();
}
}
}

public Color PercentBackColor
{
get
{
return clPercent;
}
set
{
clPercent = value;
this.Invalidate();
}
}

public Color PercentTextColor
{
get
{
return clText;
}
set
{
clText = value;
this.Invalidate();
}
}
以上首先定義了事件,並在百分比改變時觸發。然後是三個屬性的實現。

下面,需要在Paint事件裡改變Percent控制的顯示狀態。切換到設計頁面,選擇整個設計面板,在屬性視圖中將游標移動到Paint,按斷行符號,字碼頁面裡就自動為Paint事件建立了架構,其中其一個參數為System.Windows.Forms.PaintEventArgs e,可以用這個參數幹很多事情。先輸入以下畫百分比控制邊界的代碼:
Pen penBlack = new Pen(Color.Black, 1);
Point ptStart = new Point(0, 0);
Point ptEnd = new Point(this.Width - 1, 0);
e.Graphics.DrawLine(penBlack, ptStart, ptEnd);
ptStart = new Point(0, 0);
ptEnd = new Point(0, this.Height);
e.Graphics.DrawLine(penBlack, ptStart, ptEnd);

Pen penWhite = new Pen(Color.White, 1);
ptStart = new Point(this.Width - 1, 0);
ptEnd = new Point(this.Width - 1, this.Height);
e.Graphics.DrawLine(penWhite, ptStart, ptEnd);
ptStart = new Point(0, this.Height - 1);
ptEnd = new Point(this.Width, this.Height - 1);
e.Graphics.DrawLine(penWhite, ptStart, ptEnd);

SolidBrush brushFill = new SolidBrush(PercentBackColor);
Rectangle rcFill = new Rectangle(2, 2, iCurPercent * (this.Width - 3) / 100, this.Height - 3);
e.Graphics.FillRectangle(brushFill, rcFill);

lbPercent.Left = this.Width / 2 - lbPercent.Width / 2;
lbPercent.Top = this.Height / 2 - lbPercent.Height / 2;
lbPercent.Text = iCurPercent.ToString() + "%";
lbPercent.ForeColor = PercentTextColor;

在控制大小發生變化時也應該重新整理,在設計頁面,游標移動到Resize,斷行符號,在Resize事件中寫下:this.Invalidate();
這樣,這個百分比控制就編完了。下面,我們在編寫一個測試程式來測試這個控制。選擇菜單:檔案->添加項目->建立項目,項目類型選擇Visual C#項目,模板選擇Windows應用程式,取名為TestPercent,按確定,建立一個Windows應用程式架構。由於是添加了一個新項目,因此,方案總管中就有了兩個項目:Percent和TestPercent。滑鼠在TestPercent上單擊右鍵,從快顯功能表中選擇“添加引用”,切換到“項目”頁面,項目名稱應為“Percent”,雙擊該項目名稱,把它加到選定的組件裡面,按確定。這樣,Percent組件就加到測試工程裡了。用過VC的#import指令或者VB的引用的人對這個操作也許會感覺比較親切。
從工具箱中找到Percent控制,將其拖到測試工程的設計面板上擺好,再從工具箱裡拖一個Button和一個Timer放好。雙擊Button,在其事件中寫下:timer1.Enabled = true; 再回到設計面板,雙擊Timer,在其事件中寫下:percent1.CurrentPercent = percent1.CurrentPercent + 1;將焦點移到使用者控制percent1上,找到事件OnPercentChange,斷行符號,在程式架構中寫下:this.Text = CurrentPercent.ToString(); 這樣,測試程式就完成了。
下面運行程式,將TestPercent設為啟動項目,運行,按下button1,可以看到進度增加的同時,視窗標題也在發生變化。
通過這個簡單的使用者控制的編寫,我們可以體會到C#編程的簡便性,對其開發環境有個基本的瞭解。該控制也可以很容易地被其他開發工具,比如Visual Basic.net使用。
以上程式在C366, 128MB, Windows2000 Advanced Server SP2,Visual Studio.net Beta2中文版下編譯通過。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.