วิธีการสร้างแถบความคืบหน้าราบรื่นใน Visual c#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 323116 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สำหรับรุ่น Microsoft Visual Basic .NET ของบทความนี้ ดู323088.
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการสร้างแบบ simple กำหนดเองUserControlเมื่อต้องการสร้าง smooth เลื่อนProgressBarตัวควบคุม

ในรุ่นก่อนหน้านี้ProgressBarควบคุม เช่นรุ่นที่มีให้กับคอนโทรล Microsoft Windows ทั่วไปของตัวควบคุม ActiveX คุณสามารถดูความคืบหน้าในสองมุมมองที่แตกต่างกัน เมื่อต้องการควบคุมมุมมองเหล่านี้ คุณใช้การเลื่อนดูคุณสมบัติ ซึ่งรวมถึงการตั้งค่ามาตรฐาน และเส้นโค้งเรียบ เลื่อนแบบเรียบสร้างสีที่แสดงถึงความก้าวหน้าบล็อกทึบ และเลื่อนแบบมาตรฐานปรากฏ segmented และจัดทำขึ้นของชุดรายการของบล็อกขนาดเล็กหรือสี่เหลี่ยมผืนผ้า

กระบวนการProgressBarตัวควบคุมที่ให้มากับ Microsoft Visual c# สนับสนุนเฉพาะการตั้งค่ามาตรฐาน

ตัวอย่างรหัสในบทความนี้อธิบายวิธีการสร้างตัวควบคุมที่สนับสนุนคุณสมบัติต่อไปนี้:
  • ค่าต่ำสุด. คุณสมบัตินี้ได้รับ หรือการตั้งค่าค่าต่ำสำหรับช่วงของค่าที่ถูกต้องสำหรับความคืบหน้า ค่าเริ่มต้นของคุณสมบัตินี้เป็นศูนย์ (0) คุณไม่สามารถตั้งค่าคุณสมบัตินี้เป็นค่าลบ
  • จำนวนสูงสุด. คุณสมบัตินี้ได้รับ หรือตั้งค่าด้านบนของช่วงของค่าที่ถูกต้องสำหรับความคืบหน้า ค่าเริ่มต้นของคุณสมบัตินี้เป็น 100
  • ค่า. คุณสมบัตินี้ได้รับ หรือการตั้งค่าระดับความคืบหน้าปัจจุบัน ค่าต้องอยู่ในช่วงที่จะค่าต่ำสุดและจำนวนสูงสุดคุณสมบัติที่กำหนด
  • ProgressBarColor. คุณสมบัตินี้ได้รับ หรือการตั้งค่าสีของแถบความคืบหน้า

สร้างตัวควบคุม ProgressBar แบบกำหนดเอง

  1. ทำตามขั้นตอนเหล่านี้เพื่อสร้างโครงการไลบรารีตัวควบคุมของ Windows ใหม่ใน Visual c#:
    1. เริ่ม Microsoft Visual Studio
    2. ในการแฟ้ม:เมนู ให้ชี้ไปที่ใหม่แล้ว คลิกProject.
    3. ในการโครงการใหม่กล่องโต้ตอบ คลิกvisual c#ภายใต้ชนิดโครงการแล้ว คลิกไลบรารีตัวควบคุมในแบบฟอร์ม windowsภายใต้แม่แบบ.

      หมายเหตุ:ใน Visual Studio .NET 2003 คลิกแสดงโครงการ c#แทนvisual c#.
    4. ในการชื่อ:กล่อง ชนิดSmoothProgressBarแล้ว คลิกตกลง.
    5. ในโครงการ Explorer เปลี่ยนชื่อเริ่มต้นคลาลจาก UserControl1.cs เพื่อ SmoothProgressBar.cs
    6. ในหน้าต่างคุณสมบัติสำหรับการUserControlวัตถุ การเปลี่ยนแปลงนั้นชื่อ:คุณสมบัติจากUserControl1เมื่อต้องการSmoothProgressBar.
  2. ณจุดนี้ คุณมักจะสืบทอดมาจากคลาสของตัวควบคุมนั้น และเพิ่มฟังก์ชันเพิ่มเติมเพื่อขยายตัวควบคุมที่มีอยู่แล้ว อย่างไรก็ตาม ในProgressBarเป็นคลาสsealedและไม่สามารถสืบทอด ดังนั้น คุณต้องสร้างตัวควบคุมจากจุดเริ่มต้น

    เพิ่มรหัสต่อไปนี้ลงในแฟ้ม SmoothProgressBar.cs ในคลาสที่ได้รับมาจาก UserControl

    หมายเหตุ:ใน Visual Studio .NET 2003 เพิ่มรหัสลงในโมดูลคลาคลา UserControl มา เฉพาะหลังส่วน “ Windows การออกแบบฟอร์มสร้างรหัส ”
    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. ในการการสร้างเมนู คลิกสร้างโซลูชันการคอมไพล์โครงการ

สร้างแอพลิเคชันไคลเอนต์ที่ตัวอย่าง

  1. ในการแฟ้ม:เมนู ให้ชี้ไปที่ใหม่แล้ว คลิกProject.
  2. ในการเพิ่มโครงการใหม่กล่องโต้ตอบ คลิกvisual c#ภายใต้ชนิดโครงการคลิกแอพลิเคชันฟอร์ม windowsภายใต้แม่แบบแล้ว คลิกตกลง.

    หมายเหตุ:ใน Visual Studio .NET 2003 คลิกแสดงโครงการ c#แทนvisual c#.
  3. ทำตามขั้นตอนเหล่านี้เพื่อเพิ่มอินสแตนซ์ที่สองของSmoothProgressBarควบคุมให้กับฟอร์ม:
    1. ในการเครื่องมือเมนู คลิกเลือกรายการที่กล่องเครื่องมือ.

      หมายเหตุ:ใน Visual Studio .NET 2003 คลิกกล่องเครื่องมือที่กำหนดเองแทนเลือกรายการที่กล่องเครื่องมือ.
    2. คลิกการคอมโพเนนต์กรอบการทำงานของ.NETแท็บ
    3. คลิกเรียกดูแล้ว ค้นหาแฟ้ม SmoothProgressBar.dll ซึ่งคุณสร้างขึ้นในการ "สร้างตัวควบคุม ProgressBar แบบกำหนดเอง"ส่วน
    4. คลิกตกลง. สังเกตว่า การSmoothProgressBarตัวควบคุมถูกเพิ่มลงในกล่องเครื่องมือ
    5. ลากอินสแตนซ์ที่สองของSmoothProgressBarควบคุมจากกล่องเครื่องมือให้กับฟอร์มเริ่มต้นของโครงการแอพลิเคชันของ Windows
  4. ลากตัวตัวจับเวลาควบคุมจากกล่องเครื่องมือให้กับฟอร์ม
  5. เพิ่มรหัสต่อไปนี้ไปขีดเหตุการณ์ของการตัวจับเวลาตัวควบคุม:
    if (this.smoothProgressBar1.Value > 0)
    {
    	this.smoothProgressBar1.Value--;
    	this.smoothProgressBar2.Value++;
    }
    else
    {
    	this.timer1.Enabled = false;
    } 
    					
  6. ลากตัวปุ่มควบคุมจากกล่องเครื่องมือให้กับฟอร์ม
  7. เพิ่มรหัสต่อไปนี้ไปคลิกเหตุการณ์ของการปุ่มตัวควบคุม:
    this.smoothProgressBar1.Value = 100;
    this.smoothProgressBar2.Value = 0;
    			
    this.timer1.Interval = 1;
    this.timer1.Enabled = true; 
    					
  8. ในการตรวจแก้จุดบกพร่องเมนู คลิกเริ่มการทำงานเมื่อต้องการเรียกใช้โครงการตัวอย่าง
  9. คลิกปุ่ม ขอให้สังเกตว่า ตัวบ่งชี้การดำเนินการที่สองแสดงข้อความ "ระหว่างดำเนินการ" ตัวบ่งชี้ความคืบหน้าหนึ่งแสดงความคืบหน้าในลักษณะเพิ่ม และตัวอื่น ๆ บ่งความคืบหน้าชี้แสดงความคืบหน้าในการลดหรือลักษณะแบบ countdown

คุณสมบัติ

หมายเลขบทความ (Article ID): 323116 - รีวิวครั้งสุดท้าย: 13 มกราคม 2554 - Revision: 5.0
ใช้กับ
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
Keywords: 
kbsweptvs2008 kbhowtomaster kbmt KB323116 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:323116

ให้ข้อเสนอแนะ

 

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