Artikel ini menunjukkan cara membuat sederhana, kustom UserControl untuk membuat halus, bergulir ProgressBar kontrol.
Di versi sebelumnya ProgressBar kontrol, seperti versi yang disediakan dengan kontrol Microsoft Windows umum kontrol ActiveX, Anda dapat melihat kemajuan dalam dua pandangan yang berbeda. Untuk mengontrol pandangan-pandangan ini, Anda menggunakan Bergulir properti, yang mencakup pengaturan standar dan halus. Bergulir halus menghasilkan bentuk blok padat warna yang mewakili kemajuan, dan standar bergulir muncul tersegmentasi dan terdiri dari serangkaian kecil blok atau persegi panjang.
The ProgressBar kontrol yang disertakan dengan Microsoft Visual C# mendukung hanya pengaturan standar.
Kode contoh dalam artikel ini menggambarkan cara membuat sebuah kontrol yang mendukung properti berikut:
Minimal. Properti ini memperoleh atau set nilai yang lebih rendah untuk rentang nilai yang valid untuk kemajuan. Nilai default properti ini adalah nol (0); Anda tidak dapat mengatur properti ini nilai negatif.
Maksimum. Properti ini memperoleh atau set nilai atas berbagai nilai yang valid untuk kemajuan. Nilai default properti ini adalah 100.
Nilai. Properti ini memperoleh atau set pada saat ini tingkat kemajuan. Nilai harus dalam kisaran yang Minimal dan Maksimum menentukan properti.
ProgressBarColor. Properti ini memperoleh atau menetapkan warna progress bar.
Membuat kustom ProgressBar control
Ikuti langkah-langkah untuk membuat sebuah proyek baru Windows Control Library di Visual C#:
Mulai Microsoft Visual Studio.
Pada Berkas menu, titik Baru, lalu klik Project.
Dalam Proyek baru kotak dialog, klik Visual C# di bawah Jenis proyek, lalu klik Windows bentuk kontrol perpustakaan di bawah Pola acu.
Dalam Nama kotak, jenis SmoothProgressBar, lalu klik Oke.
Dalam proyek Explorer, mengubah nama modul kelas default dari UserControl1.cs ke SmoothProgressBar.cs.
Di jendela properti untuk UserControl objek, mengubah Nama properti dari UserControl1 untuk SmoothProgressBar.
Pada titik ini, Anda biasanya mewarisi dari kelas kontrol dan kemudian menambahkan fungsionalitas tambahan untuk memperpanjang ada kontrol. Namun, ProgressBar kelas disegel dan tidak dapat diwariskan. Oleh karena itu, Anda harus membangun kontrol dari awal.
Tambahkan kode berikut ke berkas SmoothProgressBar.cs, di kelas yang berasal dari UserControl.
Catatan Dalam Visual Studio.NET 2003, menambahkan kode ke modul kelas dari kelas UserControl diturunkan, hanya setelah bagian "Windows Form Designer dihasilkan kode".
int min = 0; // Minimum value for progress range
int max = 100; // Maximum value for progress range
int val = 0; // Current progress
Color BarColor = Color.Blue; // Color of progress meter
protected override void OnResize(EventArgs e)
{
// Invalidate the control to get a repaint.
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush brush = new SolidBrush(BarColor);
float percent = (float)(val - min) / (float)(max - min);
Rectangle rect = this.ClientRectangle;
// Calculate area for drawing the progress.
rect.Width = (int)((float)rect.Width * percent);
// Draw the progress meter.
g.FillRectangle(brush, rect);
// Draw a three-dimensional border around the control.
Draw3DBorder(g);
// Clean up.
brush.Dispose();
g.Dispose();
}
public int Minimum
{
get
{
return min;
}
set
{
// Prevent a negative value.
if (value < 0)
{
min = 0;
}
// Make sure that the minimum value is never set higher than the maximum value.
if (value > max)
{
min = value;
min = value;
}
// Ensure value is still in range
if (val < min)
{
val = min;
}
// Invalidate the control to get a repaint.
this.Invalidate();
}
}
public int Maximum
{
get
{
return max;
}
set
{
// Make sure that the maximum value is never set lower than the minimum value.
if (value < min)
{
min = value;
}
max = value;
// Make sure that value is still in range.
if (val > max)
{
val = max;
}
// Invalidate the control to get a repaint.
this.Invalidate();
}
}
public int Value
{
get
{
return val;
}
set
{
int oldValue = val;
// Make sure that the value does not stray outside the valid range.
if (value < min)
{
val = min;
}
else if (value > max)
{
val = max;
}
else
{
val = value;
}
// Invalidate only the changed area.
float percent;
Rectangle newValueRect = this.ClientRectangle;
Rectangle oldValueRect = this.ClientRectangle;
// Use a new value to calculate the rectangle for progress.
percent = (float)(val - min) / (float)(max - min);
newValueRect.Width = (int)((float)newValueRect.Width * percent);
// Use an old value to calculate the rectangle for progress.
percent = (float)(oldValue - min) / (float)(max - min);
oldValueRect.Width = (int)((float)oldValueRect.Width * percent);
Rectangle updateRect = new Rectangle();
// Find only the part of the screen that must be updated.
if (newValueRect.Width > oldValueRect.Width)
{
updateRect.X = oldValueRect.Size.Width;
updateRect.Width = newValueRect.Width - oldValueRect.Width;
}
else
{
updateRect.X = newValueRect.Size.Width;
updateRect.Width = oldValueRect.Width - newValueRect.Width;
}
updateRect.Height = this.Height;
// Invalidate the intersection region only.
this.Invalidate(updateRect);
}
}
public Color ProgressBarColor
{
get
{
return BarColor;
}
set
{
BarColor = value;
// Invalidate the control to get a repaint.
this.Invalidate();
}
}
private void Draw3DBorder(Graphics g)
{
int PenWidth = (int)Pens.White.Width;
g.DrawLine(Pens.DarkGray,
new Point(this.ClientRectangle.Left, this.ClientRectangle.Top),
new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top));
g.DrawLine(Pens.DarkGray,
new Point(this.ClientRectangle.Left, this.ClientRectangle.Top),
new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth));
g.DrawLine(Pens.White,
new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth),
new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
g.DrawLine(Pens.White,
new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top),
new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
}
Pada Bangun menu, klik Membangun solusi untuk mengkompilasi proyek.
Membuat contoh aplikasi klien
Pada Berkas menu, titik Baru, lalu klik Project.
Dalam Menambah proyek baru kotak dialog, klik Visual C# di bawah Jenis proyek, klik Windows formulir aplikasi di bawah Pola acu, lalu klik Oke.
Pada Debug menu, klik Mulai untuk menjalankan contoh proyek.
Klik tombol. Perhatikan bahwa indikator kemajuan dua menampilkan teks "kemajuan". Satu indikator progres menampilkan kemajuan dalam cara yang meningkat, dan indikator kemajuan lain menampilkan kemajuan dalam penurunan atau cara hitung mundur.
ID Artikel: 323116 - Kajian Terakhir: 26 September 2011 - Revisi: 2.0
Berlaku bagi:
Microsoft Visual C# 2008 Express Edition
Microsoft Visual C# 2005 Express Edition
Kata kunci:
kbsweptvs2008 kbhowtomaster kbmt KB323116 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:323116
Köszönjük! Ez az információ segítséget nyújt számunkra, hogy fejlesszük a támogatási tartalmat. További támogatási lehet?ségekért keresse fel a következ? webhelyet: Súgó és támogatási webhely.