26 พฤษภาคม 2555

VB.NET แสดงสถานะปุ่มเปลี่ยนภาษา Grave Accent ( ~ )

การเขียนคำสั่งเพื่อแสดงสถานะของภาษาบนแป้นพิมพ์ (keyboard) ที่ใช้อยู่ สามารถทำได้โดยอาศัยการตรวจสอบการกดปุ่ม Grave Accent ( ~ ) จาก Procedure ของฟอร์ม ชื่อ InputLanguageChanged ตามตัวอย่างด้านล่าง (Source Code from : http://songkwae.com/foxboard/display_topic_threads.asp?ForumID=3&TopicID=3815&PagePosition=1) ดังนี้

วิธีที่ 1 ที่ Procedure : InputLanguageChange
Private Sub Form1_InputLanguageChanged _
           (ByVal sender As Object, ByVal e As _
            System.Windows.Forms.InputLanguageChangedEventArgs) _
            Handles Me.InputLanguageChanged

    Label1.Text = InputLanguage.CurrentInputLanguage.Culture.DisplayName.ToString

End Sub
ที่ Procedure : Load
Private Sub Form1_Load _
            (ByVal sender As System.Object, ByVal e As System.EventArgs) _
             Handles MyBase.Load
    Label1.Text = InputLanguage.CurrentInputLanguage.Culture.DisplayName.ToString
End Sub
วิธีที่ 2 อาศัยเรียกใช้จาก user32 ให้ทำการ Import คลาสเข้ามาใช้งาน
Imports System.Runtime.InteropServices
จากนั้นสร้าง Function ชื่อ GetKeyBoardLayoutName
   _
  Private Shared Function GetKeyboardLayoutName _
         (ByVal sb As System.Text.StringBuilder) As Integer
     'ไม่ต้องใส่อะไร
    End Function
ที่ Procedure : InputLanguageChange
Private Sub Form1_InputLanguageChanged _
           (ByVal sender As Object, ByVal e As _
            System.Windows.Forms.InputLanguageChangedEventArgs) _
            Handles Me.InputLanguageChanged
        Dim sb As New System.Text.StringBuilder(" "c, 256)
        Dim len As Integer
        len = GetKeyboardLayoutName(sb)
        Label1.Text = sb.ToString

End Sub
ที่ Procedure : Load
Private Sub Form1_Load _
            (ByVal sender As System.Object, ByVal e As System.EventArgs) _
             Handles MyBase.Load
        Dim sb As New System.Text.StringBuilder(" "c, 256)
        Dim len As Integer
        len = GetKeyboardLayoutName(sb)
        Label1.Text = sb.ToString
End Sub
สำหรับวิธีที่ 2 การแสดงผลจะเป็นรหัส เช่น ' ไทย -- 0000041E ' English -- 00000409 หวังว่าคงเป็นประโยชน์.... สวัสดี คนไทยไม่ทิ้งกัน

03 พฤษภาคม 2555

VB.Net ค้นหาข้อมูล

ทความนี้นำเสนอการสร้างฟอร์มค้นหาข้อมูล โดยทำการสร้างฟอร์มขึ้นมาแล้วค้นข้อมูลจากตารางในฐานข้อมูล SQL Server จากนั้นนำข้อมูลที่ค้นได้มาแสดงในกริด เมื่อผู้ใช้ DoubleClick เลือกที่แถว ให้ทำการส่งค่ารหัสในแถวที่เลือกกลับไปยังฟอร์มหลัก

เริ่มทำฟอร์มสอบถามข้อมูล
ให้สร้างฟอร์มที่ Visual Studio ขึ้นมาใหม่ แล้วตั้งชื่อฟอร์มว่า frmInquiry จากนั้นให้สร้างคอนโทรลต่างๆ ตามภาพแล้วกำหนด property ดังนี้



ป้อนคำสั่งที่ frmInquiry.vb ดังนี้
Imports System.Data
Imports System.Data.SqlClient

Public Class frmInquiry
    ' ตัวแปรที่ใช้ใน Property [AssCode]
    Dim rAssCode As String = " "

    Private Sub frmInquiry_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        queryData()
        'สลับสีของแถว 
        DataGridView1.RowsDefaultCellStyle.BackColor = Color.White
        DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Azure

        With DataGridView1
            .DefaultCellStyle.NullValue = ""
            .Columns(0).HeaderText = "รหัสสินทรัพย์"
            .Columns(0).Width = 100
            .Columns(1).HeaderText = "รายการ"
            .Columns(1).Width = 200
            .Columns(2).HeaderText = "หน่วยนับ"
            .Columns(2).Width = 80
        End With
    End Sub
    Private Sub txtSearch_TextChanged(ByVal sender As System.Object, _
               ByVal e As System.EventArgs) Handles txtSearch.TextChanged
        queryData()
    End Sub
    Private Sub DataGridView1_CellContentDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentDoubleClick
        Dim row As Integer = DataGridView1.CurrentCellAddress.Y
        AssCode = DataGridView1.Rows(row).Cells(0).Value   'Cell(0) คือ คอลัมแรกของกริดนับจากซ้ายมือ
        Me.Close()
    End Sub
    Sub queryData()
        'ให้ทำการแก้ไข Connection String ตามที่เราใช้งานอยู่
        Dim connString As String = "Data Source=.;Initial Catalog=ชื่อฐานข้อมูล;Persist Security Info=True;User ID=sa;Password=รหัสผ่าน"

        Dim myConn As SqlConnection = New SqlConnection
        myConn.ConnectionString = connString

        'ให้แก้ไขคำสั่ง SQL ตามที่ต้องการ
        Dim da As SqlDataAdapter = New SqlDataAdapter _
                       ("SELECT TOP 50 ASSCODE, NAME, UMCODE  FROM ABASSET WHERE ASSCODE+NAME LIKE '%" & txtSearch.Text.Trim & "%'  ORDER BY ASSCODE", myConn)
        Dim ds As DataSet = New DataSet
        da.Fill(ds, "ABASSET")
        myConn.Close()

        DataGridView1.DataSource = ds.Tables(0)
    End Sub
    '' หากมีการส่งคืนหลายค่า ก็สร้าง Property เพิ่ม
    Public Property [AssCode]() As String
        Get
            Return Me.rAssCode
        End Get
        Set(ByVal value As String)
            Me.rAssCode = value
        End Set
    End Property
End Class
ต่อมาเราจะมาทำฟอร์มหลัก สำหรับเรียกฟอร์มค้นหา

เริ่มทำฟอร์มหลัก

ที่ฟอร์ม Form1 ให้สร้างคอนโทรลต่างๆ ดังภาพ

จากนั้นทำการป้อนคำสั่งที่ form1.vb ดังนี้

Public Class Form1
    Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
        Dim fm As New frmInquiry()
        fm.ShowDialog()
        If fm.AssCode.ToString <> "" Then
            txtAssCode.Text = fm.AssCode.ToString  'อ้างถึง property ชื่อ [AssCode] ของฟอร์ม frmInquiry
        End If
        fm.Dispose()
        txtAssCode.Focus()
End Sub
End Class
ทำการเรียกฟอร์มขึ้นมาทำงาน โดยกดปุ่ม F5 เพื่อรันโปรเจกต์
เมื่อปร่กฎหน้าจอ Form1 ให้คลิกปุ่ม ... ที่ฟอร์ม แล้วทดสอบดู ตามตัวอย่างดังภาพ


"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.