ตัวอย่างนี้จะเกิดขึ้นจากแบบสอบถามใน บทความนี้ .
การควบคุมที่มีการจัด ColorDialog จานสีแบบเดิม แต่ความจริงก็คือสตูดิโอภาพเป็นมาก nicer และการแสดงสีทั้งหมดโดยใช้ชื่อตามที่กำหนดในคุณสมบัติของวัตถุ System.Drawing
ป.ร. ให้ไว้ปัญหาที่เกิดขึ้นว่ามีการควบคุมที่แสดงให้เราในรายการนี้ของสีที่เราเห็นว่าเราสามารถ constriur หนึ่งตัวเอง
ตัวอย่างเช่นเราต้องการโครงการใหม่และสองรูปแบบ
ในรูปแบบแรกกระบองก็ต้องเรียก 2 แบบดังแสดงในรูปต่อไปนี้:

ปุ่มและรหัสเป็นดังนี้:
BtnColor_Click Private Sub (ผู้ส่ง ByVal เป็น System.Object, ByVal e เป็น System.EventArgs) จัดการ btnColor.Click ในฐานะที่เป็น New Form2 Dim vForm2 vForm2.ShowDialog () ย่อยสิ้นสุด
และในรูปแบบนี้ n botoes ListBox และสองจะ (ยอมรับและยกเลิก) เป็นในรูปแบบดังต่อไปนี้:

ในการโหลดเหตุการณ์ของฟอร์มในการสร้างคุณสมบัติบางอย่างของ ListBox และดำเนินการชื่อของสีที่มีรหัสต่อไปนี้:
Form2_Load Private Sub (ผู้ส่ง ByVal เป็น System.Object, ByVal e เป็น System.EventArgs) MyBase.Load จับ ListBox1.DrawMode = DrawMode.OwnerDrawFixed ListBox1.ItemHeight = 20 ListBox1.Items.Clear () ListBox1.BeginUpdate () สำหรับปี่เป็น Reflection.PropertyInfo ใน GetType (สี) แต่ละ. GetProperties (หรือ Reflection.BindingFlags.Static Reflection.BindingFlags.Public) ListBox1.Items.Add (pi.Name) ต่อไป ListBox1.EndUpdate () ย่อยสิ้นสุด
ในบรรทัดแรกของ Load "ListBox1.DrawMode = DrawMode.OwnerDrawFixed" สร้างที่องค์ประกอบทั้งหมดของการควบคุมจะถูกดึงด้วยตนเองและมีความสูงเดียวกัน ademçasนี้เหตุการณ์ DrawItem เรียกแสดงเพียงก่อนที่แต่ละรายการ
เมื่อต้องการตั้งค่าเหตุการณ์ DrawItem ของ ListBox เลือก (ในมุมมองออกแบบ) ListBox1 เรากด F4 เพื่อดูคุณสมบัติและด้านบนของกล่องคุณสมบัติให้เลือกสายฟ้าเห็นเหตุการณ์ที่ควบคุมสามารถใช้ได้ เรา DrawItem และเราดับเบิลคลิกที่ รูปต่อไปนี้แสดงให้เห็นถึงวิธีการ:

และนี่คือรหัสของเหตุการณ์ DrawItem
ListBox1_DrawItem Private Sub (ผู้ส่ง ByVal เป็นวัตถุอี ByVal, ณ System.Windows.Forms.DrawItemEventArgs) จัดการ ListBox1.DrawItem รูปสี่เหลี่ยมผืนผ้ามซำเป็นสี่เหลี่ยมผืนผ้า e.Bounds = หาก (e.State และ DrawItemState.Selected) แล้ว e.Graphics.FillRectangle (SystemBrushes.Highlight สี่เหลี่ยม) อื่น e.Graphics.FillRectangle (Brushes.White สี่เหลี่ยม) End If มซำ As String = ListBox1.Items nombreColor (e.Index) มซำข ณ นิ SolidBrush (Color.FromName (nombreColor)) rectangulo.Inflate (-16, -2) e.Graphics.FillRectangle (b, นิสี่เหลี่ยมผืนผ้า (rectangulo.X, rectangulo.Y, 30, rectangulo.Height)) e.Graphics.DrawRectangle (Pens.Black, นิสี่เหลี่ยมผืนผ้า (rectangulo.X, rectangulo.Y, 30, rectangulo.Height)) หาก (e.State และ DrawItemState.Selected) แล้ว e.Graphics.DrawString (nombreColor, e.Font, Brushes.White, rectangulo.X + 34, rectangulo.Y + 2) อื่น e.Graphics.DrawString (nombreColor, e.Font, Brushes.Black, rectangulo.X + 34, rectangulo.Y + 2) End If ย่อยสิ้นสุด
ตอนนี้เราก็ต้องโปรแกรมปุ่ม eventosde ดังแสดงในรหัสต่อไปนี้:
BtnAceptar_Click Private Sub (ผู้ส่ง ByVal เป็น System.Object, ByVal e เป็น System.EventArgs) จัดการ btnAceptar.Click My.Forms.Form1.BackColor = Color.FromName (ListBox1.SelectedItem) ย่อยสิ้นสุด BtnCancelar_Click Private Sub (ผู้ส่ง ByVal เป็น System.Object, ByVal e เป็น System.EventArgs) จัดการ btnCancelar.Click Me.Close () ย่อยสิ้นสุด
ดีในการทดสอบโปรแกรม ... ถ้าทุกอย่างไปจะมีลักษณะดังนี้:

ฉันออกข้อกำหนดบาง:
Graphics.FillRectangle (วิธีการ): เติมตกแต่งภายในของรูปสี่เหลี่ยมที่ระบุโดยคู่พิกัดความกว้างและความสูง
Graphics.DrawRectangle (วิธีการ): วาดรูปสี่เหลี่ยมผืนผ้าที่กำหนดโดยคู่พิกัดความกว้างและความสูง
Graphics.DrawString (วิธีการ): วาดสตริงข้อความที่ระบุไว้ในพื้นที่ที่กำหนดและมีวัตถุแปรงที่ระบุไว้และตัวอักษร
หวังนี้จะช่วยและคุณสามารถใช้ในโครงการของคุณ
Bitacoras.com ข้อมูล ...
อัตราใน Bitacoras.com: ตัวอย่างนี้เกิดขึ้นจากแบบสอบถามในบทความนี้ การควบคุม ColorDialog tresenta เราจานสีดั้งเดิม แต่ก็เป็นตรุอีที่จากสตูดิโอภาพเป็นมาก nicer และการแสดงสีทั้งหมดของคุณ n .....
ตัวอย่างที่ดีมากขอขอบคุณ
GREAT!
เป็นที่ชื่นชมอย่างมาก!
! ดีมาก!
สิ่งเดียวที่ฉันทำงานเป็นปุ่มยกเลิก
haha ผมลืม แต่รหัสที่ง่ายมาก: Me.Close
ล้มเหลวในการเลือกสีโปร่งใสนั้นจะเป็นอย่างไร ........... สีอื่น ๆ ถ้าทำงาน
salu2
คือสีโปร่งใสไม่สามารถนำไปใช้เป็นสีพื้นหลังของรูปแบบ แต่ถ้าคุณใช้สำหรับการควบคุมอื่น ๆ
ขอบคุณสำหรับการแสดงความคิดเห็น!
บันทึกชีวิตของฉันเช่นนี้! ... แต่ที่ผมได้เห็นหน้าจอ prpiedades ที่คุณเปลี่ยนสีได้หรือไม่เพราะมันช่วยให้ฉันเห็น "My.Forms.Form1.BackColor." ขอบคุณ salu2
สวัสดี
ฉันได้รับข้อผิดพลาดที่ระบุว่าคาดว่าจะได้. <ถ้า (e.State และ DrawItemState เลือก เอ็ด) แล้ว
e.Graphics.FillRectangle (SystemBrushes.Highlight สี่เหลี่ยม)
ช่วยเมนโดยเอฟเอ
Graciass
ทักทาย ...
ฉันกำลังมองหาเทคนิคที่จะทำให้การออกแบบดีกว่าในการควบคุมที่จะต้องเป็นเช่นที่สนามบิน แต่ผมไม่มีความคิดหรือที่ฉันสามารถหาบางสิ่งบางอย่างโปรดหากคุณสามารถช่วยฉันด้วยที่ anetmano ขอบคุณมาก ...
VERA นี้ขอบคุณมากเช่นนี้ ฉันจะสามารถที่จะใช้มันเพื่อความต้องการของฉัน
ขอบคุณจากเมริดา, ยูกาตัง