Cara membuat halus progress bar di Visual C#

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 323116 - Melihat produk di mana artikel ini berlaku.
Untuk Microsoft Visual Basic.NET versi artikel ini, lihat 323088.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

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

  1. Ikuti langkah-langkah untuk membuat sebuah proyek baru Windows Control Library di Visual C#:
    1. Mulai Microsoft Visual Studio.
    2. Pada Berkas menu, titik Baru, lalu klik Project.
    3. Dalam Proyek baru kotak dialog, klik Visual C# di bawah Jenis proyek, lalu klik Windows bentuk kontrol perpustakaan di bawah Pola acu.

      Catatan Dalam Visual Studio.NET 2003, klik Visual C# proyek Melainkan Visual C#.
    4. Dalam Nama kotak, jenis SmoothProgressBar, lalu klik Oke.
    5. Dalam proyek Explorer, mengubah nama modul kelas default dari UserControl1.cs ke SmoothProgressBar.cs.
    6. Di jendela properti untuk UserControl objek, mengubah Nama properti dari UserControl1 untuk SmoothProgressBar.
  2. 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));
    } 
    					
  3. Pada Bangun menu, klik Membangun solusi untuk mengkompilasi proyek.

Membuat contoh aplikasi klien

  1. Pada Berkas menu, titik Baru, lalu klik Project.
  2. Dalam Menambah proyek baru kotak dialog, klik Visual C# di bawah Jenis proyek, klik Windows formulir aplikasi di bawah Pola acu, lalu klik Oke.

    Catatan Dalam Visual Studio.NET 2003, klik Visual C# proyek Melainkan Visual C#.
  3. Ikuti langkah-langkah ini untuk menambahkan dua item dari SmoothProgressBar mengendalikan ke bentuk:
    1. Pada Alat menu, klik Memilih item Toolbox.

      Catatan Dalam Visual Studio.NET 2003, klik Menyesuaikan Toolbox Melainkan Memilih item Toolbox.
    2. Klik .NET Framework komponen tab.
    3. Klik Peopledan kemudian cari file SmoothProgressBar.dll, yang Anda buat di "Membuat kustom ProgressBar control"bagian.
    4. Klik Oke. Perhatikan bahwa SmoothProgressBar kontrol ditambahkan Toolbox.
    5. Tarik dua contoh SmoothProgressBar mengendalikan dari toolbox ke bentuk standar proyek aplikasi Windows.
  4. Tarik Timer kontrol dari toolbox untuk bentuk.
  5. Tambahkan kode berikut untuk Kutu peristiwa Timer kontrol:
    if (this.smoothProgressBar1.Value > 0)
    {
    	this.smoothProgressBar1.Value--;
    	this.smoothProgressBar2.Value++;
    }
    else
    {
    	this.timer1.Enabled = false;
    } 
    					
  6. Tarik Tombol kontrol dari toolbox untuk bentuk.
  7. Tambahkan kode berikut untuk Klik peristiwa Tombol kontrol:
    this.smoothProgressBar1.Value = 100;
    this.smoothProgressBar2.Value = 0;
    			
    this.timer1.Interval = 1;
    this.timer1.Enabled = true; 
    					
  8. Pada Debug menu, klik Mulai untuk menjalankan contoh proyek.
  9. 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.

Properti

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

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com