30 พฤศจิกายน 2553

VB.Net กับ Lambda

คุณสามารถเขียนฟังก์ชัน (function) หรือ ซับรูทีน (sub) ภายใต้นิพจน์คำสั่ง (expression) lambda ได้อย่างง่าย ๆ เหมือนกับการกำหนดตัวแปร ซึ่งเราสามารถเขียนไว้ภายใต้ ฟังก์ชัน หรือ เมธอด ที่มีอยู่แล้ว
การเขียนฟังก์ชันหรือซับรูทีนในนิพจน์คำสั่ง Lambda เราไม่ต้องตั้งชื่อให้กับฟังก์ชัน หรือ เมธอด ซึ่งก็เป็นข้อดีอีกอย่างหนึ่ง

สำหรับวิธีการ จะขอยกตัวอย่างเปรียบเทียบระหว่าง การเขียนฟังก์ชัน ธรรมดา กับ การเขียนแบบ lambda

ตัวอย่าง ฟังก์ชันการหา Factorial

Module Module1
Sub Main()
Dim nResult AS Long
nResult = Factorial(5)
Console.WriteLine(nResult) 'ค่าที่ได้คือ 120
End Sub

Function Factorial(ByVal number As Long) As Long
If number <= 1 Then
Return (1)
Else
Return number * Factorial(number - 1)
End If
End Function
End Module

ตัวอย่าง ฟังก์ชันการหา Factorial โดยเขียนแบบนิพจน์คำสั่ง Lambda

Module Module1
Sub Main()
Dim nResult As Func(Of Long, Long) = Function(number As Long)
If number <= 1 Then
Return (1)
Else
Return number * nResult(number - 1)
End If
End Function
Console.WriteLine(nResult.Invoke(5)) 'ค่าที่ได้คือ 120
End Sub
End Module

26 พฤศจิกายน 2553

VB.Net จับ Form ใส่ SplitContainer

จับปูใส่กระด้ง กับ จับฟอร์มใส่ splitContainer เหมือนกันหรือไม่ ?
คงไม่เหมือนกันเพราะปูสามารถเดินหลุดออกจากกระด้งได้
แต่ ฟอร์มมันจะหลุดออกจาก SplitContainer ไม่ได้

อ่านไปอ่านมาก็คงจะแปลกใจ ว่าทำไมถึงต้องมาจับฟอร์มใส่ไว้ใน SplitContainer
แต่เมื่ออ่านบทความนี้ แล้วทำตามจนสำเร็จ ก็คงจะไม่แปลกใจว่าทำไมเราจะต้องจับฟอร์มให้มันมาอยู่ใน SplitContainer

เพราะเหตุเหรอ ก็อยากให้มันมาอยู่ในนี้ ยิ่งอ่านยิ่งงงใช่ไหม งั้นมาเริ่มทำกันเลยดีกว่า
1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน myFormSplitContainer













2. ที่ฟอร์ม Designer ของ form1 ให้ตกแตงฟอร์มตามตัวอย่าง















- ลาก MenuStrip มาวางไว้ที่ฟอร์ม แล้วใส่รายการตามภาพด้านบน
- ลาก SplitContainer มาวางไว้ที่ฟอร์ม
- ลาก TreeView มาวางไว้ที่ SplitContainer ฝั่งด้านซ้าย (panel 1) แล้วจัดให้สวยงาม
- ให้กำหนด Property ของฟอร์ม ชื่อ IsMdiContainer กำหนดให้เป็น True
3. ที่ TreeView ให้คลิกที่แถบมุมบนด้านขวาเพื่อเปิดเมนู แล้วเลือก Edit Nodes...

- ทำการเพิ่ม Node เข้าไปโดยคลิกที่ Add Root หรือ Add Child


















4. จากนั้นไปที่เมนู ดับเบิ้ลคลิกที่รายการเมนูชื่อ "เปิดฟอร์ม 1" (จะเข้าหน้าต่างเขียนคำสั่ง)














ให้เขียนคำสั่ง ดังนี้

Private Sub เปดฟอรม1ToolStripMenuItem_Click(ByVal sender As System.Object,  _
ByVal e As System.EventArgs) Handles เปดฟอรม1ToolStripMenuItem.Click
     If myFindForm("form2") = False Then
          Dim frm As Form2
          frm = New Form2
          frm.TopLevel = False
          frm.Parent = Me.SplitContainer1.Panel2
          frm.Show()
          frm.BringToFront()
      End If
End Sub

Function myFindForm(ByVal frm As String) As Boolean
    For Each ctl As Control In Me.SplitContainer1.Panel2.Controls
        If ctl.Name.ToUpper = frm.ToUpper Then
            ctl.Show()
            ctl.BringToFront()
            Return True
        End If
   Next
   Return False
End Function

5. ให้ทำการสร้างฟอร์มขึ้นมาใหม่อีก 1 ฟอร์ม โดยกดปุ่ม Ctrl + Shift + A
จากนั้นคลิกที่ Windows Form -> Windows Form แล้วตั้งชื่อฟอร์มว่า Form2.vb ดังภาพ



















6. ตกแต่งหน้าจอของฟอร์ม form2.vb ตามชอบใจ หรือจะเลียนแบบ ตามภาพด้านล่าง




















7. ทำการ run โปรแกรมที่เขียนไว้โดยกดปุ่ม F5
จากนั้นก็ทดสอบเลือกเมนู ฟอร์ม -> เปิดฟอร์ม 1 ก็จะได้ผลลัพธ์ดังภาพ



















ถ้าหากผู้อ่านทำตามขั้นตอนมาถึงจนได้ผลลัพธ์ที่เห็นดังภาพ ก็คงหมดข้อสงสัยว่าทำไม่ต้องจับฟอร์มใส่ SplitContainer

โชคดี มีวิธีใช้ฟอร์มแบบใหม่ ๆ
"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.