วันพฤหัสบดีที่ 18 เมษายน พ.ศ. 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


ทำการออกแบบหน้าจอตามรูปด้านบน (ภาพที่ 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