พอดีว่าได้ทำโปรเจคฐานข้อมูลใหม่
และในรูปแบบข้อมูลมีการใช Checkbox เยอะ หากจะทำตาราง Database ให้ Checkbox แต่ละตัว เวลาเขียน code ก็จะยาว และแก้ไขลำบาก
ก็เลยหาข้อมูลและมีการบันทึกข้อมูลในลักษณะนี้อยู่
หลักการก็คือ
เราจะกำหนดให้แต่ละบิตในเลขฐานสอง แทนด้วย checkbox แต่ละตัว โดย checkbox ที่เป็นกลุ่มข้อมูลเดียวกันก็จะทำเป็น Control
array ไว้ เวลาเขียน
code จะได้ loop
ได้ง่ายหน่อย
เช่น
มี Checkbox อยู่
4 ตัว
หากเราต้องการบันทึกข้อมูลว่าทุกตัวมีค่าเป็น True (คลิ๊กเลือก) ก็จะบันทึกข้อมูลไปว่า 15 หรือ 1111 ในเลขฐานสอง (แต่จะบันทึกเป็นเลขฐานสิบนะ)
หรือต้องการคลิ๊กเลือกแค่
Checkbox ที่ 2 กับ 4 ก็จะบันทึกข้อมูลไปว่า 5 หรือ 0101 ในเลขฐานสอง
ขั้นตอนการตรวจสอบ
Checkbox เพื่อคำนวนหาเลขที่ต้องบันทึก
1
กำหนดตัวแปรขึ้นมา
2 Loop ตรวจสอบค่าของแต่ละ
Checkbox
3
เมื่อค่าเป็น True ให้บวกค่าเข้าตัวแปร
ด้วย 2^(เลข Loop
ปัจจุบัน -1)
4
เมื่อตรวจสอบจนครบก็จะได้เลขที่เราต้องการ
ตัวอย่าง
(ใช้เป็น Excel VBA )
สร้าง
Control และตั้งชื่อตามนี้เลย
Code
Private Sub CmdRun_Click()
'ตัวแปรแสดงเลขฐานสอง
Dim BiVal As String
'ตัวแปรเลขฐาน 10
Dim DecVal As Integer
'กำหนดค่าเริ่มต้น
BiVal = vbNullString
DecVal = 0
'Loop ตรวจสอบ
For i = 1 To 7
If
UserForm1.Controls("CheckBox" & i).Value Then
DecVal = DecVal + (2 ^ (i - 1))
BiVal = "1" & BiVal
Else
BiVal = "0" & BiVal
End If
Next
'แสดงเลขฐานสองใน Label1
Label3.Caption = BiVal
Label4.Caption = DecVal
End Sub
ผลลัพธ์เมื่อ
Run Program
ขั้นตอนการตรวจสอบข้อมูลที่บันทึกไว้
เพื่อใส่ค่าให้แต่ละ Checkbox
1
ดึงค่าที่เราบันทึกไว้เก็บใส่ตัวแปร
2 Loop ตรวจสอบค่าในแต่ละตำแหน่ง
หลักการในการตรวจสอบ
ให้นำค่าที่ได้บันทึกไว้ มา AND gate กับ 2^(Loop ปัจจุบัน - 1)
จากนั้นเอามาหารด้วย 2^(Loop ปัจจุบัน)
ตัวอย่าง
เมื่อนำมาหารด้วย
4 (2^2) ก็จะได้เท่ากับ
1
3
เมื่อได้ค่าเป็น 1
ให้ Checkbox Array ที่เลข
Loop นั้น
มีค่าเป็น True
ถ้าได้ค่าเป็น
0 ก็มีค่าเป็น False
4
เมื่อตรวจสอบจนครบ Checkbox ก็จะมีค่าตามที่เราได้บันทึกไว้
ตัวอย่าง
(ใช้เป็น Excel VBA )
สร้าง
Control และตั้งชื่อตามนี้เลย
Code
Private Sub
CmdRun_Click()
'ตัวแปรแสดงเลขฐานสอง
Dim BiVal As String
'กำหนดตัวแปรขึ้นมา
เพื่อเก็บค่าที่บันทึกไว้ มาคำนวน
Dim DecVal As Integer
DecVal = Val(TextBox1.Text)
BiVal = vbNullString
'Loop ตรวจสอบ
For i = 1 To 7
If (DecVal And (2 ^ (i - 1))) / (2 ^ (i - 1)) = 1 Then
UserForm1.Controls("CheckBox" & i).Value = True 'Excel VBA สร้าง Control Array ไม่ได้ เลยใช้แบบนี้แทน
Else
UserForm1.Controls("CheckBox" & i).Value = False
End If
BiVal = CStr((DecVal And (2 ^ (i - 1))) / (2 ^ (i - 1))) & BiVal 'เก็บค่าเลขฐานสอง ไว้แสดงผล
Next
'แสดงเลขฐานสองใน Label3
Label3.Caption = BiVal
End Sub
ความคิดเห็น
แสดงความคิดเห็น