วันพฤหัสบดีที่ 18 เมษายน พ.ศ. 2556
วันอาทิตย์ที่ 31 มีนาคม พ.ศ. 2556
วันพุธที่ 27 มีนาคม พ.ศ. 2556
วันศุกร์ที่ 15 มีนาคม พ.ศ. 2556
วันพุธที่ 6 มีนาคม พ.ศ. 2556
BackgroundWorker
อีกหนึ่ง Control ในการเพิ่มความหล่อให้กับ
Program ทำหน้าที่ในการสร้าง Process การทำงานอีก 1 Process มาทำงานพร้อมกับ Process ที่กำลังทำอยู่ในปัจจุบัน ด้วยส่วนใหญ่แล้วเรามักจะเอาBackgroundWorker ไปจับคู่ทำงานร่วมกับ ProgressBar เพื่อใช้สำหรับบอกความคืบหน้าในการทำงานของ Program สำหรับ Process ที่จำเป็นต้องใช้ระยะเวลาในการทำงานในระดับหนึ่ง ไปดูตัวอย่างการใช้งานกัน
ขั้นตอนที่ 1 ออกแบบ
ขั้นตอนที่ 2 Coding
Dim
Value As Double
Private Sub Button1_Click(sender As
System.Object, e As
System.EventArgs) _
Handles
Button1.Click
If
bw.IsBusy <> True Then
bw.RunWorkerAsync()
End If
End Sub
Private Sub bw_DoWork(sender As
System.Object, e As
System.ComponentModel.DoWorkEventArgs) _
Handles
bw.DoWork
Dim i As Integer
Dim
worker As System.ComponentModel.BackgroundWorker = CType(sender,
System.ComponentModel.BackgroundWorker)
For i =
TextBox1.Text To TextBox2.Text
worker.ReportProgress(i * 100 /
Val(TextBox2.Text))
Value += Val(TextBox1.Text)
Next
End Sub
Private Sub bw_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)
_
Handles
bw.ProgressChanged
ProgressBar1.Value =
e.ProgressPercentage.ToString
End Sub
Private Sub bw_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)
_
Handles
bw.RunWorkerCompleted
TextBox3.Text = Value
End Sub
ขั้นตอนการทำงาน
ErrorProvider
ErrorProvider ถือได้ว่าเป็น Control
ที่เพิ่มความหล่อให้กับโปรแกรมของเราอย่างยิ่งยวด
แถมยังทำให้ผู้ใช้สามารถรู้ถึงความผิดพลาดที่เกิดขึ้นได้ง่ายมากยิ่งขึ้นอีกด้วย
แต่ ErrorProvider กับได้รับความสนใจของนักพัฒนาโปรแกรมน้อยเท่าที่ควร
(บางคนแทบไม่เคยใช้มันเลยด้วยซ้ำ) สำหรับเพื่อนๆ ที่ยังไม่รู้จัก ErrorProvider
มากนักเราไปดูกันเลยว่า ErrorProvider ทำอะไรได้บ้าง
โดยปกติแล้ว ErrorProvider มักจะถูกหยิบยกมาใช้ในการแสดงข้อผิดพลาดที่เกิดขึ้นจากการใช้งานโปรแกรม
(ส่วนใหญ่จะเกิดขึ้นจากการ Input ข้อมูล) โดยเจ้า ErrorProvider จะถูกแสดงไปที่บริเวณจุดที่เกิดข้อผิดพลาด (จากภาพแสดงไปที่ด้านขวาของ TextBox จากการใส่ข้อมูลผิดพลาด)
ซึ้งทำให้ผู้ใช้งานเข้าถึงข้อผิดพลาดนั้นๆได้ง่ายและเร็วยิ่งขึ้น เราไปดูตัวอย่างการใช้งานกัน (ตัวอย่างให้แสดง ErrorProvider หากหากข้อมูลที่รับเข้ามาไม่ใช้ตัวเลข)
ขั้นตอนที่ 1 : Design
ขั้นตอนที่ 2 : Coding
ขั้นตอนที่ 1 : Design
ทำการออกแบบหน้าจอตามรูปด้านบน
(ภาพที่ 1) และ Add
ErrorProvider ไปยัง Form โดยการไปที่ Toolbox แล้วก็ลากไปวางไว้บน Form แล้วทำการตั้งชื่อ ตามที่เราต้องการ
(ตัวอย่างตั้งชื่อเป็น EP)
ขั้นตอนที่ 2 : Coding
ทำการ Coding ไปที่ Event Click ของ Button ตรวจสอบ โดยเป็นคำสั่งตรวจสอบเงือนไขว่าค่าที่รับมาเป็นข้อมูลชนิดตัวเลขหรือไม่ดังนี้
If Not
IsNumeric(TextBox1.Text) Then
EP.SetError(TextBox1, "กรุณาใส่เฉพาะตัวเลข")
Else
EP.SetError(TextBox1, String.Empty) <---(1)
End If
จากตัวอย่างเห็นได้ว่าการกำหนด ErrorProvider ทำได้โดยการกำหนด Patameter
ผ่าน Method .SetError โดยจะใช้ Parameter
2 ตัวคือ
1. Control ที่ต้องการ Add
ErrorProvider ในตัวอย่าง Add ไปที่ TextBox1)
2. String ค่าที่ต้องการแสดงใน ErrorProvider
หากไม่ต้องการให้แสดง ErrorProvider สามารถทำได้โดยใส่ String.Empty (หรือค่าว่าง “”) ไปยัง Parameter
ตัวที่ 2 (<---(1))
วันจันทร์ที่ 4 มีนาคม พ.ศ. 2556
AndAlso Operator
เคยเจอไหมกับเวลาที่ Coding Programs แล้วตอน Compile มันไม่ Error แต่พอใช้งานมันดัน Error ซะงั้น (Error ขณะ Runtime)
ผมเชื่อมั้นอย่างสุดซึ้งว่าเจอกันมาทุกคน ถ้า Error ด้วยปัญหาที่มันเกินความคาดหมายก็ยังพอทำเนา
แต่ถ้ามา Error ด้วยเรื่องกระโหลกกระลาแบบตัวอย่างต่อไปนี้หลายๆคนคงเซ็งไม่น้อยไปดูตัวอย่างกัน
ตัวอย่าง : การตรวจสอบข้อมูลชนิดตัวเลขที่ >= 15 |
ดูๆ
แล้วมันก็ไม่น่าผิดอะไร เงือนไขแรกก็ตรวจสอบว่าเป็นตัวเลขหรือเปล่า
เงือนไขที่สองก็ตรวจสอบว่าค่ามากกว่าหรือเท่ากับ 15 หรือเปล่า ลอง
Run ดูก็ไม่มีปัญหาอะไรแต่พอใส่ตัวอักษรเข้าไปเท่านั้นแหละ
มันมาเลย Conversion
From String “A” To Type ‘Double’ Is Not Valid. อันนี้ต้องบอกว่าถ้าใครไม่เจอไม่มีทางรู้ว่ามันรู้สึกยังไง
ตอนผมเจอมันครั้งแรกผมงงเป็นไก่ตาแตก เพราะมั้นใจอย่างยิ่งว่า
เงือนไขที่ผมกำหนดมันไม่ผิดแน่นอน เพราะจากตัวอย่าง มันควรเจอแล้วว่า
เขตข้อมูลที่กำหนดมันไม่ใช้ตัวเลข จึงควรข้าม เงือนไขที่ 2 ไป
(แบบที่เราๆมักคิดกันตอนที่เรียนหนังสือเพราะถ้าอันแรกผิด ถึงอันหลังจะถูกมันก็ผิดอยู่ดีจึงไม่จำเป็นอะไรที่ต้องไปตรวจสอบ สำหรับนักพัฒนาที่พัฒนาโปรแกรมมาซักระยะเวลาหนึ่งทุกคนต้องเจอเหตุการณ์แบบนี้อย่างแน่นอน
ซึ่งหลายๆคนมักจะแก้ปัญหานี้โดยวิธีการใช้ IF ซ้อน IF อีกทีหนึ่ง (สมัยก่อนผมก็ใช้วิธีนี้)
ซึ่งก็ไม่ผิดอะไร แต่มันจะทำให้ Code มันยืดไปหน่อยและการกลับมาทำความเข้าใจกับ Code ในภายหลังก็ทำได้ยากเช่นกัน ซึ่ง AndAlso แก้ปัญหานี้ได้ตรงจุดพอดีเพราะการทำงานของ AndAlso นั้นจะทำการข้ามการตรวจสอบเงือนไขที่ 2 ทันทีถ้าเงือนไขแรกเป็น False
สมัครสมาชิก:
บทความ (Atom)