|
ที่ต้องตั้งชื่อว่า งานต้นแบบจำลองการขาย ก็เพราะว่าแอดมินนำเสนอวิธีการออกแบบโปรแกรมด้วยการจำลองข้อมูลตัวอย่างขึ้นมาก่อน โดยที่ยังไม่ได้ออกแบบตารางข้อมูลแต่อย่างใด หากท่านที่พึ่งเข้ามาอ่านต้องย้อนกลับไปดูในเรื่อง แจกฟรีโค้ดต้นฉบับ โปรแกรมต้นแบบร้านทองก้อนเบอเกอร์แดนซ์ ซึ่งจะทำให้เรามองออกว่าควรจะออกแบบฟิลด์ข้อมูลรายการอาหาร/เครื่องดื่มอะไรบ้าง พอมาถึงโค้ดชุดนี้แอดมินจะดึงข้อมูลจากตารางอาหาร/เครื่องดื่ม เพื่อมาทำการสร้างปุ่มรายการในแบบไดนามิคตามจำนวนรายการ ให้ปรากฏอยู่บนหน้าจอภาพ จากนั้นก็คลิ๊กทำการขายออกไป โดยรายการอาหาร/เครื่องดื่มจะไปปรากฏอยู่ในตารางกริด หากเป็นการเลือกรายการเดิม จะทำการเพิ่มจำนวนเข้าไป แต่หากเป็นรายการที่ยังไม่ได้ถูกเลือก ก็จะเพิ่มรายการใหม่เข้าไปยังแถวรายการของตารางกริด สุดท้ายคือการคิดเงิน ซึ่งแอดมินได้ทำการแจกโค้ดเอาไว้ล่วงหน้ามาก่อนแล้ว ฟอร์มการชำระเงินด้วยการสร้างปุ่มคำสั่ง (Button) แบบไดนามิค ...
โค้ดในชุดนี้ แอดมินมีเจตนาที่จะสื่อความหมายเอาไว้ให้เห็นว่า เรานำเอาผลลัพธ์ที่ได้มาทำการออกแบบและจัดเก็บข้อมูลตารางการขายอาหาร/เครื่องดื่มได้อย่างไรบ้าง ว่าง่ายๆคือนำเอาข้อมูลเอ้าพุทย้อนกลับมาคิดเป็นอินพุทนั่นเอง ...
มาดูโค้ดในส่วนที่สำคัญ ...
การ Query จำนวนปุ่มคำสั่งมาจากจำนวนของรายการอาหาร/เครื่องดื่มในแบบไดนามิค (ทำตัวอย่างเอาไว้ให้ 2 กลุ่ม)
- ' / ---------------------------------------------------------------
- ' / การใช้งานจริง จะต้องค้นหาจำนวนของกลุ่มสินค้าเข้ามาก่อน
- ' / เพื่อกำหนดจำนวน TabControl ได้
- ' / ---------------------------------------------------------------
- ' / ใส่ Panel ลงบนฟอร์ม
- ' / Create a tabpage
- Dim tabPageRef As New TabPage
- ' / Set the tabpage to be your desired tab
- tabPageRef = TabControl1.TabPages(0)
- '// Create Panel
- With pn1
- .Location = New System.Drawing.Point(1, 1)
- .Size = New System.Drawing.Size(TabControl1.Width - 10, TabControl1.Height - 30)
- .BackColor = Color.Moccasin
- .AutoScroll = True
- .Anchor = AnchorStyles.Bottom + AnchorStyles.Top
- End With
- 'Add the panel
- tabPageRef.Controls.Add(pn1)
- strSQL = _
- " SELECT Food.FoodPK, Food.FoodID, Food.FoodName, Food.PriceCash, Food.PictureFood, Food.CategoryFK" & _
- " FROM(Food) " & _
- " WHERE Food.CategoryFK = 2 " & _
- " ORDER BY FoodPK "
- '// สร้างปุ่ม (Button) ลงใน Panel (จำนวนหลัก, รายการ, Panel)
- Call AddButtonsToForm(3, strSQL, pn1)
- '// New Panel
- 'set the tabpage to be your desired tab
- tabPageRef = TabControl1.TabPages(1)
- '// Create Panel
- With pn2
- .Location = New System.Drawing.Point(1, 1)
- .Size = New System.Drawing.Size(TabControl1.Width - 10, TabControl1.Height - 30)
- .BackColor = Color.Moccasin
- .AutoScroll = True
- .Anchor = AnchorStyles.Bottom + AnchorStyles.Top
- End With
- 'add the panel
- tabPageRef.Controls.Add(pn2)
- strSQL = _
- " SELECT Food.FoodPK, Food.FoodID, Food.FoodName, Food.PriceCash, Food.PictureFood, Food.CategoryFK" & _
- " FROM(Food) " & _
- " WHERE Food.CategoryFK = 3 " & _
- " ORDER BY FoodPK "
- '// สร้างปุ่ม (Button) ลงใน Panel (จำนวนหลัก, รายการ, Panel)
- Call AddButtonsToForm(3, strSQL, pn2)
คัดลอกไปที่คลิปบอร์ด
การสร้างปุ่มคำสั่งลงใน TabControl และ Panel ...
- ' / ---------------------------------------------------------------
- '// เพิ่มปุ่มคำสั่ง (Button Control) แบบ Run Time
- Private Sub AddButtonsToForm(ByVal ColCount As Byte, ByVal sql As String, pn As Panel)
- Dim Buttons As New Dictionary(Of String, Button)
- Dim img As String
- Dim Rec As Integer = 0
- Try
- If Conn.State = ConnectionState.Closed Then Conn.Open()
- Cmd = New OleDbCommand(sql, Conn)
- DR = Cmd.ExecuteReader
- ' / Make sure Primary Key only one and not duplicate
- While DR.Read()
- If DR.HasRows Then
- Dim B As New Button
- pn.Controls.Add(B)
- With B
- .Height = 140
- .Width = 140
- .Left = (Rec Mod ColCount) * B.Width
- .Top = (Rec \ ColCount) * B.Height
- .Text = DR.Item("FoodName") & vbCrLf & Format(CDbl(DR.Item("PriceCash")), "#,##0.00") & "B."
- Buttons.Add(B.Text, B)
- '// นำค่า Primary Key ไปเก็บไว้ที่คุณสมบัติ Tag เมื่อกดปุ่มคำสั่งจะใช้ค่านี้ไปค้นหาจากฐานข้อมูล
- .Tag = DR.Item("FoodPK")
- '// อ่านค่ารูปภาพ และตรวจสอบการมีอยู่จริงของภาพด้วยฟังค์ชั่น GetImages
- img = GetImages(DR.Item("PictureFood"))
- '// ใส่ภาพลงไปในปุ่มคำสั่ง Button
- .BackgroundImage = New System.Drawing.Bitmap(img)
- '//
- .Cursor = Cursors.Hand
- .BackgroundImageLayout = ImageLayout.Stretch
- .Font = New Font("Century Gothic", 14, FontStyle.Bold)
- .ForeColor = Color.LightYellow
- .TextImageRelation = TextImageRelation.ImageAboveText
- .TextAlign = ContentAlignment.BottomCenter
- .UseVisualStyleBackColor = True
- End With
- Rec += 1
- '// Force events handler.
- AddHandler B.Click, AddressOf ClickButton
- End If
- End While
- DR.Close()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
คัดลอกไปที่คลิปบอร์ด
โค้ดในการคลิ๊กที่ปุ่มคำสั่งเลือกรายการอาหาร/เครื่องดื่ม หากมีรายการเดิมจะทำการเพิ่มจำนวน หากไม่มีต้องค้นรายการมาเพิ่มลงในตารางกริด
- ' / ---------------------------------------------------------------
- ' / เพิ่มรายการแถวใหม่ (UnBound Data)
- Private Sub AddRow(ByVal PK As Integer) ', ByVal Description As String, ByVal UnitPrice As Double)
- '// ใช้เพื่อค้นหาข้อมูลในตารางกริดก่อน
- Dim blnExist As Boolean = False
- '// ตรวจสอบว่า Primary Key มีอยู่ในตารางกริดหรือไม่ (หากมีให้ +เพิ่ม, หากไม่มีค่อยไปค้นหาข้อมูล)
- For Rec As Integer = 0 To dgvData.RowCount - 1
- ' / หากพบ Primary Key ในหลัก 0 มาตรงกันกับค่าในแถวของตารางกริด
- If dgvData.Rows(Rec).Cells(0).Value = PK Then
- ' / ให้บวกจำนวนที่เลือกเพิ่มขึ้นอีก 1 (Quantity = Quantity + 1)
- dgvData.Rows(Rec).Cells(3).Value = dgvData.Rows(Rec).Cells(3).Value + 1
- lblLastPrice.Text = "Last Price: " & Format(CDbl(dgvData.Rows(Rec).Cells(2).Value), "#,##0.00")
- '// เจอข้อมูลเดิม
- blnExist = True
- '// ออกจากลูปไปเลย เพื่อไม่ให้เสียเวลา
- Exit For
- End If
- Next
- '// ไม่พบข้อมูลในตารางกริด ก็ทำการเรียกจากตารางข้อมูลเข้ามาแสดงผล
- If Not blnExist Then
- If Conn.State = ConnectionState.Closed Then Conn.Open()
- strSQL = _
- " SELECT Food.FoodPK, Food.FoodID, Food.FoodName, Food.PriceCash, Food.PictureFood, Food.CategoryFK" & _
- " FROM(Food) " & _
- " WHERE Food.FoodPK = " & PK & _
- " ORDER BY FoodPK "
- Cmd = New OleDbCommand
- Cmd.Connection = Conn
- Cmd.CommandText = strSQL
- DR = Cmd.ExecuteReader
- DR.Read()
- '// เพิ่มรายการแถวสินค้าเข้าไปใหม่ Primary Key (ถูกซ่อน), ชื่อสินค้า, ราคาขาย, จำนวน = 1
- Dim row As String() = New String() {PK, DR.Item("FoodName").ToString, Format(CDbl(DR.Item("PriceCash").ToString), "#,##0.00"), "1"}
- dgvData.Rows.Add(row)
- End If
- '// หาจำนวนเงินรวมใหม่
- Call CalAmount()
- '// เป็นสินค้าตัวใหม่ที่ถูกเพิ่มเข้ามาให้อยู่ในแถว แสดงราคาสินค้าล่าสุด
- If Not blnExist Then
- lblLastPrice.Text = "Last Price: " & Format(CDbl(DR.Item("PriceCash").ToString), "#,##0.00")
- End If
- DR.Close()
- '// โฟกัสไปที่ DataGridView แล้วย้ายไปแถวล่าสุด
- dgvData.Focus()
- SendKeys.Send("^{END}")
- End Sub
คัดลอกไปที่คลิปบอร์ด
มาดูโค้ดฉบับเต็มกันเถอะ ... (ฟอร์มหลัก frmMainOrder.vb)
- ' / ---------------------------------------------------------------
- ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
- ' / eMail : thongkorn@hotmail.com
- ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
- ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
- ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
- ' / More Info: http://www.g2gnet.com/webboard
- ' /
- ' / Purpose: Prototype of Burger Order System V2.
- ' / Microsoft Visual Basic .NET (2010) + MS Access 2007+
- ' /
- ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
- ' / You can modify and/or distribute without to inform the developer.
- ' / ---------------------------------------------------------------
- Imports System.Data.OleDb
- Public Class frmMainOrder
- Private pn1 As New Panel()
- Private pn2 As New Panel
- '// รวมจำนวนเงิน
- Dim Amount As Double
- Private Sub frmMainOrder_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- Select Case e.KeyCode
- Case Keys.F8
- btnPayment_Click(sender, e)
- Case Keys.F10
- Me.Close()
- End Select
- End Sub
- ' / ---------------------------------------------------------------
- Private Sub frmMainOrder_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- '// Cennect MS Access DB.
- Conn = MyDBModule()
- '//
- Amount = "0.00"
- Call InitGrid()
- ' / ---------------------------------------------------------------
- ' / การใช้งานจริง จะต้องค้นหาจำนวนของกลุ่มสินค้าเข้ามาก่อน
- ' / เพื่อกำหนดจำนวน TabControl ได้
- ' / ---------------------------------------------------------------
- ' / ใส่ Panel ลงบนฟอร์ม
- ' / Create a tabpage
- Dim tabPageRef As New TabPage
- ' / Set the tabpage to be your desired tab
- tabPageRef = TabControl1.TabPages(0)
- '// Create Panel
- With pn1
- .Location = New System.Drawing.Point(1, 1)
- .Size = New System.Drawing.Size(TabControl1.Width - 10, TabControl1.Height - 30)
- .BackColor = Color.Moccasin
- .AutoScroll = True
- .Anchor = AnchorStyles.Bottom + AnchorStyles.Top
- End With
- 'Add the panel
- tabPageRef.Controls.Add(pn1)
- strSQL = _
- " SELECT Food.FoodPK, Food.FoodID, Food.FoodName, Food.PriceCash, Food.PictureFood, Food.CategoryFK" & _
- " FROM(Food) " & _
- " WHERE Food.CategoryFK = 2 " & _
- " ORDER BY FoodPK "
- '// สร้างปุ่ม (Button) ลงใน Panel (จำนวนหลัก, รายการ, Panel)
- Call AddButtonsToForm(3, strSQL, pn1)
- '// New Panel
- 'set the tabpage to be your desired tab
- tabPageRef = TabControl1.TabPages(1)
- '// Create Panel
- With pn2
- .Location = New System.Drawing.Point(1, 1)
- .Size = New System.Drawing.Size(TabControl1.Width - 10, TabControl1.Height - 30)
- .BackColor = Color.Moccasin
- .AutoScroll = True
- .Anchor = AnchorStyles.Bottom + AnchorStyles.Top
- End With
- 'add the panel
- tabPageRef.Controls.Add(pn2)
- strSQL = _
- " SELECT Food.FoodPK, Food.FoodID, Food.FoodName, Food.PriceCash, Food.PictureFood, Food.CategoryFK" & _
- " FROM(Food) " & _
- " WHERE Food.CategoryFK = 3 " & _
- " ORDER BY FoodPK "
- '// สร้างปุ่ม (Button) ลงใน Panel (จำนวนหลัก, รายการ, Panel)
- Call AddButtonsToForm(3, strSQL, pn2)
- End Sub
- ' / ---------------------------------------------------------------
- '// เพิ่มปุ่มคำสั่ง (Button Control) แบบ Run Time
- Private Sub AddButtonsToForm(ByVal ColCount As Byte, ByVal sql As String, pn As Panel)
- Dim Buttons As New Dictionary(Of String, Button)
- Dim img As String
- Dim Rec As Integer = 0
- Try
- If Conn.State = ConnectionState.Closed Then Conn.Open()
- Cmd = New OleDbCommand(sql, Conn)
- DR = Cmd.ExecuteReader
- ' / Make sure Primary Key only one and not duplicate
- While DR.Read()
- If DR.HasRows Then
- Dim B As New Button
- pn.Controls.Add(B)
- With B
- .Height = 140
- .Width = 140
- .Left = (Rec Mod ColCount) * B.Width
- .Top = (Rec \ ColCount) * B.Height
- .Text = DR.Item("FoodName") & vbCrLf & Format(CDbl(DR.Item("PriceCash")), "#,##0.00") & "B."
- Buttons.Add(B.Text, B)
- '// นำค่า Primary Key ไปเก็บไว้ที่คุณสมบัติ Tag เมื่อกดปุ่มคำสั่งจะใช้ค่านี้ไปค้นหาจากฐานข้อมูล
- .Tag = DR.Item("FoodPK")
- '// อ่านค่ารูปภาพ และตรวจสอบการมีอยู่จริงของภาพด้วยฟังค์ชั่น GetImages
- img = GetImages(DR.Item("PictureFood"))
- '// ใส่ภาพลงไปในปุ่มคำสั่ง Button
- .BackgroundImage = New System.Drawing.Bitmap(img)
- '//
- .Cursor = Cursors.Hand
- .BackgroundImageLayout = ImageLayout.Stretch
- .Font = New Font("Century Gothic", 14, FontStyle.Bold)
- .ForeColor = Color.LightYellow
- .TextImageRelation = TextImageRelation.ImageAboveText
- .TextAlign = ContentAlignment.BottomCenter
- .UseVisualStyleBackColor = True
- End With
- Rec += 1
- '// Force events handler.
- AddHandler B.Click, AddressOf ClickButton
- End If
- End While
- DR.Close()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
- Private Function GetImages(ByVal picData As String) As String
- '// Show picture in cell.
- If picData <> "" Then
- '// First, before load data into DataGrid and check File exists or not?
- If Dir(strPathImages & picData) = "" Then
- GetImages = strPathImages & "FoodStuff.png"
- Else
- GetImages = strPathImages & picData
- End If
- '// ไม่มีข้อมูลภาพ
- Else
- GetImages = strPathImages & "FoodStuff.png"
- End If
- End Function
- '// Click Button event, get the text of button
- Public Sub ClickButton(ByVal sender As Object, ByVal e As System.EventArgs)
- Dim btn As Button = sender
- 'MessageBox.Show("คุณคลิ๊ก [" + btn.Text + "]" & vbCrLf & "Tag=" & btn.Tag & " จะเป็นค่า Primary Key")
- Call AddRow(btn.Tag)
- End Sub
- ' / ---------------------------------------------------------------
- ' / เพิ่มรายการแถวใหม่ (UnBound Data)
- Private Sub AddRow(ByVal PK As Integer) ', ByVal Description As String, ByVal UnitPrice As Double)
- '// ใช้เพื่อค้นหาข้อมูลในตารางกริดก่อน
- Dim blnExist As Boolean = False
- '// ตรวจสอบว่า Primary Key มีอยู่ในตารางกริดหรือไม่ (หากมีให้ +เพิ่ม, หากไม่มีค่อยไปค้นหาข้อมูล)
- For Rec As Integer = 0 To dgvData.RowCount - 1
- ' / หากพบ Primary Key ในหลัก 0 มาตรงกันกับค่าในแถวของตารางกริด
- If dgvData.Rows(Rec).Cells(0).Value = PK Then
- ' / ให้บวกจำนวนที่เลือกเพิ่มขึ้นอีก 1 (Quantity = Quantity + 1)
- dgvData.Rows(Rec).Cells(3).Value = dgvData.Rows(Rec).Cells(3).Value + 1
- lblLastPrice.Text = "Last Price: " & Format(CDbl(dgvData.Rows(Rec).Cells(2).Value), "#,##0.00")
- '// เจอข้อมูลเดิม
- blnExist = True
- '// ออกจากลูปไปเลย เพื่อไม่ให้เสียเวลา
- Exit For
- End If
- Next
- '// ไม่พบข้อมูลในตารางกริด ก็ทำการเรียกจากตารางข้อมูลเข้ามาแสดงผล
- If Not blnExist Then
- If Conn.State = ConnectionState.Closed Then Conn.Open()
- strSQL = _
- " SELECT Food.FoodPK, Food.FoodID, Food.FoodName, Food.PriceCash, Food.PictureFood, Food.CategoryFK" & _
- " FROM(Food) " & _
- " WHERE Food.FoodPK = " & PK & _
- " ORDER BY FoodPK "
- Cmd = New OleDbCommand
- Cmd.Connection = Conn
- Cmd.CommandText = strSQL
- DR = Cmd.ExecuteReader
- DR.Read()
- '// เพิ่มรายการแถวสินค้าเข้าไปใหม่ Primary Key (ถูกซ่อน), ชื่อสินค้า, ราคาขาย, จำนวน = 1
- Dim row As String() = New String() {PK, DR.Item("FoodName").ToString, Format(CDbl(DR.Item("PriceCash").ToString), "#,##0.00"), "1"}
- dgvData.Rows.Add(row)
- End If
- '// หาจำนวนเงินรวมใหม่
- Call CalAmount()
- '// เป็นสินค้าตัวใหม่ที่ถูกเพิ่มเข้ามาให้อยู่ในแถว แสดงราคาสินค้าล่าสุด
- If Not blnExist Then
- lblLastPrice.Text = "Last Price: " & Format(CDbl(DR.Item("PriceCash").ToString), "#,##0.00")
- End If
- DR.Close()
- '// โฟกัสไปที่ DataGridView แล้วย้ายไปแถวล่าสุด
- dgvData.Focus()
- SendKeys.Send("^{END}")
- End Sub
- Private Sub CalAmount()
- '// หาจำนวนเงินรวมใหม่
- Amount = 0
- For i = 0 To dgvData.RowCount - 1
- Amount = Amount + (CDbl(dgvData.Rows(i).Cells(2).Value) * CInt(dgvData.Rows(i).Cells(3).Value))
- Next
- '// แสดงผลราคารวม
- lblAmount.Text = "Total: " & Format(Amount, "#,##0.00")
- End Sub
- ' / ---------------------------------------------------------------
- '// Initialize DataGridView @Run Time
- Private Sub InitGrid()
- '// ตั้งค่าจำนวนหลัก (Columns)
- With dgvData
- .Columns.Add("FoodPK", "FoodPK")
- .Columns.Add("FoodName", "รายการ")
- .Columns.Add("PriceCash", "ราคา")
- .Columns.Add("Quantity", "จำนวน")
- '//
- .Columns(0).Visible = False
- '.Columns(3).SortMode = DataGridViewColumnSortMode.NotSortable
- '// UnitPrice
- With .Columns(2)
- .ValueType = GetType(Decimal)
- .DefaultCellStyle.Format = "N2"
- .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
- End With
- '// Quantity
- With .Columns(3)
- .ValueType = GetType(Double)
- .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
- End With
- End With
- '//
- With dgvData
- .RowHeadersVisible = False
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- .AllowUserToResizeRows = False
- .MultiSelect = False
- .SelectionMode = DataGridViewSelectionMode.FullRowSelect
- .ReadOnly = True
- '//
- .Font = New Font("Century Gothic", 14)
- .RowTemplate.Height = 40
- '.RowTemplate.MinimumHeight = 32
- ' Autosize Column
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- .AutoResizeColumns()
- '// Even-Odd Color
- .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
- ' Adjust Header Styles
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.Black
- .Font = New Font("Century Gothic", 16, FontStyle.Bold)
- .WrapMode = DataGridViewTriState.False
- End With
- End With
- End Sub
- ' / ---------------------------------------------------------------
- Private Sub btnRemove_Click(sender As System.Object, e As System.EventArgs) Handles btnRemove.Click
- If dgvData.RowCount <= 0 Then Exit Sub
- dgvData.Focus()
- For Rec As Integer = 0 To dgvData.RowCount - 1
- '// ใช้หลัก PK เป็นกุญแจหลักในการอ้างอิง
- Dim PK As Integer = dgvData.CurrentRow.Cells(0).Value
- ' / หากพบ Primary Key ในหลัก 0 มาตรงกันกับค่าในแถวของตารางกริด
- If dgvData.Rows(Rec).Cells(0).Value = PK Then
- '// หากพบข้อมูลเดิม แต่มีจำนวน = 1 ก็ลบออกไปได้เลย
- If dgvData.Rows(Rec).Cells(3).Value = 1 Then
- dgvData.Rows.Remove(dgvData.CurrentRow)
- dgvData.Refresh()
- '// ไม่ต้องไปลบอีกรอบ
- Exit For
- Else
- ' / ให้ลบจำนวนลง 1 (Quantity = Quantity - 1)
- dgvData.Rows(Rec).Cells(3).Value = dgvData.Rows(Rec).Cells(3).Value - 1
- Exit For
- End If
- End If
- Next
- '// รวมจำนวนเงิน
- Call CalAmount()
- End Sub
- ' / ---------------------------------------------------------------
- ' / คิดเงิน
- Private Sub btnPayment_Click(sender As System.Object, e As System.EventArgs) Handles btnPayment.Click
- If dgvData.RowCount <= 0 Then Exit Sub
- frmPayment.ShowDialog()
- End Sub
- Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles btnClear.Click
- dgvData.Rows.Clear()
- Amount = "0.00"
- End Sub
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- Private Sub frmMainOrder_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- If Conn.State = ConnectionState.Open Then Conn.Close()
- Application.Exit()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ฟอร์มการคิดเงิน (frmPayment.vb)
- ' / ---------------------------------------------------------------
- ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
- ' / eMail : thongkorn@hotmail.com
- ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
- ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
- ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
- ' / More Info: http://www.g2gnet.com/webboard
- ' /
- ' / Purpose: Payment with Button Array.
- ' / Microsoft Visual Basic .NET (2010)
- ' /
- ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
- ' / You can modify and/or distribute without to inform the developer.
- ' / ---------------------------------------------------------------
- Public Class frmPayment
- Private Sub frmPayment_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- Select Case e.KeyCode
- Case Keys.F8
- btnCash_Click(sender, e)
- Case Keys.F10
- Me.Close()
- End Select
- End Sub
- Private Sub frmPayment_Load(sender As Object, e As System.EventArgs) Handles Me.Load
- '// สร้างปุ่ม 0 - 9
- Call AddButtons(3, 9)
- '//
- txtAmount.Text = Format(CDbl(Mid(frmMainOrder.lblAmount.Text, 7, Len(frmMainOrder.lblAmount.Text) - 6)), "#,##")
- txtCash.Text = "0"
- txtChange.Text = "0.00"
- '//
- txtCash.Focus()
- End Sub
- '// เพิ่มปุ่มคำสั่ง (Button Control)
- Private Sub AddButtons(ByVal ColCount As Byte, ByVal MaxBtn As Byte)
- Dim Buttons As New Dictionary(Of String, Button)
- For i As Integer = 0 To MaxBtn - 1
- Dim B As New Button
- Me.Panel1.Controls.Add(B)
- Me.Panel1.Width = ColCount * 100
- With B
- .Height = 60
- .Width = 66
- .Left = (i Mod ColCount) * B.Width
- .Top = (i \ ColCount) * B.Height
- .Text = i + 1
- Buttons.Add(B.Text, B)
- .Tag = i + 1
- .Cursor = Cursors.Hand
- .Font = New Font("Tahoma", 14, FontStyle.Bold)
- End With
- '// Force events handler.
- AddHandler B.Click, AddressOf ClickButton
- Next
- End Sub
- '// Click Button event, get the text of button
- Public Sub ClickButton(ByVal sender As Object, ByVal e As System.EventArgs)
- Dim btn As Button = sender
- 'MessageBox.Show("คุณคลิ๊ก [" + btn.Text + "]" & vbCrLf & "Tag=" & btn.Tag)
- txtCash.Text = CDbl(txtCash.Text + btn.Text)
- Call CalSum()
- End Sub
- ' / ---------------------------------------------------------------
- Private Sub btnCash_Click(sender As System.Object, e As System.EventArgs) Handles btnCash.Click
- If txtCash.Text = "" Or Len(txtCash.Text) = 0 Or Val(txtCash.Text) = 0 Then
- txtCash.Text = 0
- txtChange.Text = "0.00"
- txtCash.Focus()
- Exit Sub
- End If
- '// ตรวจสอบยอดเงิน
- If CDbl(txtCash.Text) - CDbl(txtAmount.Text) < 0 Then
- MessageBox.Show("จำนวนเงินยังไม่ครบ กรุณาแก้ไขข้อมูลใหม่ด้วย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- txtCash.Focus()
- Else
- MessageBox.Show("ทำรายการเสร็จสิ้นเรียบร้อย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- '// สั่งเคลียร์รายการข้ามฟอร์มมาเลย
- With frmMainOrder
- .lblAmount.Text = "0.00"
- .lblLastPrice.Text = "0.00"
- .dgvData.Rows.Clear()
- End With
- Me.Close()
- End If
- End Sub
- Private Sub txtCash_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtCash.KeyPress
- '// รับค่าเฉพาะตัวเลขเท่านั้น
- e.Handled = CheckDigitOnly(Asc(e.KeyChar))
- txtCash.Text = CDbl(txtCash.Text)
- End Sub
- Private Sub txtCash_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtCash.TextChanged
- Call CalSum()
- End Sub
- Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles btnClear.Click
- txtCash.Text = "0"
- txtChange.Text = "0.00"
- End Sub
- ' / ---------------------------------------------------------------
- Private Sub CalSum()
- '/ Trap Error
- If Trim(txtCash.Text) = "" Or Len(Trim(txtCash.Text)) = 0 Then
- txtCash.Text = 0
- txtChange.Text = "0.00"
- Exit Sub
- End If
- '//
- Dim dChange As Double = CDbl(txtCash.Text) - CDbl(txtAmount.Text)
- txtChange.Text = dChange
- If CDbl(dChange) < 0 Then
- txtChange.ForeColor = Color.Red
- Else
- txtChange.ForeColor = Color.Blue
- End If
- txtCash.Focus()
- End Sub
- Private Sub btn2Zero_Click(sender As System.Object, e As System.EventArgs) Handles btn2Zero.Click
- txtCash.Text = CDbl(txtCash.Text + btn2Zero.Text)
- Call CalSum()
- End Sub
- Private Sub btn1Zero_Click(sender As System.Object, e As System.EventArgs) Handles btn1Zero.Click
- txtCash.Text = CDbl(txtCash.Text + btn1Zero.Text)
- Call CalSum()
- End Sub
- Private Sub txtAmount_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtAmount.KeyPress
- e.Handled = True
- End Sub
- Private Sub txtChange_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtChange.KeyPress
- e.Handled = True
- End Sub
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
โมดูลหากิน ... modDataBase.vb
- Imports System.Data.OleDb
- Module modDataBase
- Public Conn As OleDbConnection
- Public Cmd As OleDbCommand
- Public DS As DataSet
- Public DR As OleDbDataReader
- Public DA As OleDbDataAdapter
- Public DT As DataTable
- Public strSQL As String '// Major SQL
- Public strStmt As String
- Public strPathImages As String = MyPath(Application.StartupPath) & "Images"
- Public Function MyDBModule() As OleDb.OleDbConnection
- Return New OleDb.OleDbConnection( _
- "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
- MyPath(Application.StartupPath) & "data" & "dbFood.accdb;Persist Security Info=True")
- End Function
- End Module
คัดลอกไปที่คลิปบอร์ด
ฟังค์ชั่นหากิน ... modFunction
- Module modFunction
- ' / --------------------------------------------------------------------------------
- ' / Get my project path
- ' / AppPath = C:\My Project\bin\debug
- ' / Replace "\bin\debug" with ""
- ' / Return : C:\My Project\
- Function MyPath(ByVal AppPath As String) As String
- '/ MessageBox.Show(AppPath);
- AppPath = AppPath.ToLower()
- '/ Return Value
- MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
- '// If not found folder then put the \ (BackSlash) at the end.
- If Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
- End Function
- ' / --------------------------------------------------------------------------------
- ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขได้เท่านั้น
- Function CheckDigitOnly(ByVal index As Integer) As Boolean
- Select Case index
- Case 48 To 57 ' เลข 0 - 9
- CheckDigitOnly = False
- Case 8, 13 ' Backspace = 8, Enter = 13
- CheckDigitOnly = False
- Case Else
- CheckDigitOnly = True
- End Select
- End Function
- End Module
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดต้นฉบับแบบเต็ม VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|