กระทู้เก่าบอร์ด อ.Yeadram
4,668 10
URL.หัวข้อ /
URL
ตรวจสอบก่อนจะ Focus Textbox ยังไงครับ
ผมมี TextBox อยู่ 2 ตัว
ตัวแรกผมสั่งว่า me.txt1.Enabled = False
ตัวสองผมสั่งตรง txt2_gotfocus()
if me.txt1.value = "" then
me.txt1.enabled = true
me.txt1.setfocus
end if
อธิบายอีกทีนะครับ
คือถ้าข้อมูลของ Txt1 ว่างเปล่า ก็ให้เปิดให้ Txt1 enabled แล้วก็ไป SetFocus ที่ผมเข้าใจคือผมไปดักที่ GotFocus (หรือ onEnter) ปรากฎว่าขึ้น Error ว่า Run-time error '2110';
microsoft Access can't move the focus to the control Txt2
ผมต้องแก้ไขยังไงครับ
ตัวแรกผมสั่งว่า me.txt1.Enabled = False
ตัวสองผมสั่งตรง txt2_gotfocus()
if me.txt1.value = "" then
me.txt1.enabled = true
me.txt1.setfocus
end if
อธิบายอีกทีนะครับ
คือถ้าข้อมูลของ Txt1 ว่างเปล่า ก็ให้เปิดให้ Txt1 enabled แล้วก็ไป SetFocus ที่ผมเข้าใจคือผมไปดักที่ GotFocus (หรือ onEnter) ปรากฎว่าขึ้น Error ว่า Run-time error '2110';
microsoft Access can't move the focus to the control Txt2
ผมต้องแก้ไขยังไงครับ
10 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R07100
ตอบไม่ได้ เพราะอ่านแล้วไม่เข้าใจ
2 @R07101
เอาใหม่ละกันครับ
คือสมมุติ ปัจจุบัน Focus อยู่ที่ Txt 2 พอผมกด Enter หรือ Tab มันก็จะ Setfocus ไปยัง Txt3 ใช่ไหมครับ แต่ผมต้องการ Check ก่อนที่จะ setfocus ไปยัง Txt3 ว่าถ้า Txt1 มีค่าว่างเปล่าให้ไปที่ Txt1 ก่อนอ่ะครับ
ผมเลยไปดักที่ Txt3 ตรง Gotfocus ว่า
if me.txt1.value = "" then
me.txt1.setfocus
end if
ปรากฎว่าขึ้น Error ว่า Run-time error '2110';
microsoft Access can't move the focus to the control Txt2
เหมือนว่าตัวมันเองกำลังจะไป Focus ที่ Txt3 อยู่แล้วดันไปสั่งให้ไป Focus ที่ Txt1 อีก เลย Error หรือเปล่าครับ
ไม่รู้จะทำยังไงเหมือนกัน
อันนี้ไม่รู้คุณ U&ME อ่านแล้วเข้าใจไหมครับ
คือสมมุติ ปัจจุบัน Focus อยู่ที่ Txt 2 พอผมกด Enter หรือ Tab มันก็จะ Setfocus ไปยัง Txt3 ใช่ไหมครับ แต่ผมต้องการ Check ก่อนที่จะ setfocus ไปยัง Txt3 ว่าถ้า Txt1 มีค่าว่างเปล่าให้ไปที่ Txt1 ก่อนอ่ะครับ
ผมเลยไปดักที่ Txt3 ตรง Gotfocus ว่า
if me.txt1.value = "" then
me.txt1.setfocus
end if
ปรากฎว่าขึ้น Error ว่า Run-time error '2110';
microsoft Access can't move the focus to the control Txt2
เหมือนว่าตัวมันเองกำลังจะไป Focus ที่ Txt3 อยู่แล้วดันไปสั่งให้ไป Focus ที่ Txt1 อีก เลย Error หรือเปล่าครับ
ไม่รู้จะทำยังไงเหมือนกัน
อันนี้ไม่รู้คุณ U&ME อ่านแล้วเข้าใจไหมครับ
3 @R07103
ถ้าทำตามกระทู้ (R07094) แล้ว กระทู้ R07101 ก็ไม่มีปัญหา
4 @R07106
เอานี่ไปด้วยเลยครับ
สมมติว่ามี TextBox 2 อัน (Text0,Text2)
Private Sub Text2_GotFocus()
If IsNull(Text0) Then
Text0.SetFocus
End If
End Sub
สมมติว่ามี TextBox 2 อัน (Text0,Text2)
Private Sub Text2_GotFocus()
If IsNull(Text0) Then
Text0.SetFocus
End If
End Sub
5 @R07143
ขอโทษครับ ถามต่อนะครับ ที่ Text2_Gotfous นะครับ
ถ้าที่ Text3_click ผมสั่งว่า text2.setfocus แล้วปรากฎว่าค่าของ isnull(text0) = True มันก็จะต้อง Setfocus ไปที่ Text0 ถูกต้องไหมครับ
ทีนี้ปรากฏว่ามันฟ้อง Error ว่า Run-time error '2110';
microsoft Access can't move the focus to the control Text2
แต่ถ้าค่า isnull(text0) = false ไม่เป็นไรครับ
ยังงี้ต้องแก้ไขตรงไหนครับ คิดไม่ออก
ถ้าที่ Text3_click ผมสั่งว่า text2.setfocus แล้วปรากฎว่าค่าของ isnull(text0) = True มันก็จะต้อง Setfocus ไปที่ Text0 ถูกต้องไหมครับ
ทีนี้ปรากฏว่ามันฟ้อง Error ว่า Run-time error '2110';
microsoft Access can't move the focus to the control Text2
แต่ถ้าค่า isnull(text0) = false ไม่เป็นไรครับ
ยังงี้ต้องแก้ไขตรงไหนครับ คิดไม่ออก
6 @R07144
ตามกระทู้ R07094 มันเหมาะที่จะใช้เช็ค Textbox หลาย ๆ อัน เราไม่ต้องเขียนโค้ด
GotFocus, LostFocus หลาย ๆ ที่ (ทำให้สับสน...)
กรณี 1 ถ้ามี TextBox หลายอัน
ซึ่งแต่ละอันคุณกำหนดให้ต้องป้อนข้อมูล โค้ดจาก กท.R07094 จะทำการเช็คตั้งแต่ TextBox(1) - TextBox(n) เมื่อเช็คแล้วถ้ายังมี TextBox บางตัวยังไม่มีข้อมูล ก็จะทำการ SetFocus ไปที่ TextBox นั้นเพื่อให้ผู้ใช้้ป้อนข้อมูล
เมื่อเป็นอย่างนั้นแล้ว เราก็แค่สร้างปุ่มเพือให้ผู้ใ้ช้กดเพียงปุ่มเดียว
เพื่อบันทึกข้อมูล
กรณี 2 ถ้ามี TextBox แค่ 2 อัน (สมมติ Text0,Text1)
ถ้าต้องการเช็คแค่ว่า Text0 มีข้อมูลหรือไม่ โดยการใช้เหตุการณ์ Text1_GotFocus ก็ให้ใช้โค้ด
Private Sub Text1_GotFocus()
If IsNull(Text0) Then
Text0.SetFocus
End If
End Sub
***หมายเหตุ
ผมเองก็ยังคงไม่เข้าใจคำถามมากนัก ยังไงเอาโค้ด Module นั้นมาให้ดูเลยก็ได้คับ
GotFocus, LostFocus หลาย ๆ ที่ (ทำให้สับสน...)
กรณี 1 ถ้ามี TextBox หลายอัน
ซึ่งแต่ละอันคุณกำหนดให้ต้องป้อนข้อมูล โค้ดจาก กท.R07094 จะทำการเช็คตั้งแต่ TextBox(1) - TextBox(n) เมื่อเช็คแล้วถ้ายังมี TextBox บางตัวยังไม่มีข้อมูล ก็จะทำการ SetFocus ไปที่ TextBox นั้นเพื่อให้ผู้ใช้้ป้อนข้อมูล
เมื่อเป็นอย่างนั้นแล้ว เราก็แค่สร้างปุ่มเพือให้ผู้ใ้ช้กดเพียงปุ่มเดียว
เพื่อบันทึกข้อมูล
กรณี 2 ถ้ามี TextBox แค่ 2 อัน (สมมติ Text0,Text1)
ถ้าต้องการเช็คแค่ว่า Text0 มีข้อมูลหรือไม่ โดยการใช้เหตุการณ์ Text1_GotFocus ก็ให้ใช้โค้ด
Private Sub Text1_GotFocus()
If IsNull(Text0) Then
Text0.SetFocus
End If
End Sub
***หมายเหตุ
ผมเองก็ยังคงไม่เข้าใจคำถามมากนัก ยังไงเอาโค้ด Module นั้นมาให้ดูเลยก็ได้คับ
7 @R07145
ไม่เข้าใจว่าทำไมต้องสั่ง Enable-Disable ถ้าต้องการบังคับให้ใส่ค่า Text ใดก่อนจึงจะยอมให้อีก Text หนึ่งรับค่าได้ก็ทำง่ายๆครับ
txt2_gotfocus() แนะนำว่าเป็น on Enter() ดีกว่า
if isnull(txt1)=True or txt1="" then
txt1.gotfocus
end if
แต่ถ้าต้องการตรวจสอบในขั้นสุดท้ายทีเดียวว่ามี Textbox ใดว่างที่ยังไม่ใส่ค่าก็ใช้วิธีนี้ครับ สร้าง Sub ขึ้นมาเองเลยอย่างนี้ครับ
Private Sub Checkdata()
For Each Ctrl In Me.Section(acDetail).Controls
If Ctrl.ControlType = acTextBox Then
If IsNull(Ctrl.Value) = True Or Ctrl.Value = "" Then
Ctrl.SetFocus
MsgBox "อยากใส่อะไรก็ว่าไป"
Exit Sub
End If
End If
Next Ctrl
End sub
ตรงบรรทัด For Each Ctrl In Me.Section(acDetail).Controls
หมายถึงตรวจสอบเฉพาะ Control ที่อยู่ใน Section Detail (ไม่ใช่ Header หรือ Footer ของฟอร์ม)
If Ctrl.ControlType = acTextBox Then
หมายถึงตรวจสอบเฉพาะ Control ที่เป็น Textbox เท่านั้น
txt2_gotfocus() แนะนำว่าเป็น on Enter() ดีกว่า
if isnull(txt1)=True or txt1="" then
txt1.gotfocus
end if
แต่ถ้าต้องการตรวจสอบในขั้นสุดท้ายทีเดียวว่ามี Textbox ใดว่างที่ยังไม่ใส่ค่าก็ใช้วิธีนี้ครับ สร้าง Sub ขึ้นมาเองเลยอย่างนี้ครับ
Private Sub Checkdata()
For Each Ctrl In Me.Section(acDetail).Controls
If Ctrl.ControlType = acTextBox Then
If IsNull(Ctrl.Value) = True Or Ctrl.Value = "" Then
Ctrl.SetFocus
MsgBox "อยากใส่อะไรก็ว่าไป"
Exit Sub
End If
End If
Next Ctrl
End sub
ตรงบรรทัด For Each Ctrl In Me.Section(acDetail).Controls
หมายถึงตรวจสอบเฉพาะ Control ที่อยู่ใน Section Detail (ไม่ใช่ Header หรือ Footer ของฟอร์ม)
If Ctrl.ControlType = acTextBox Then
หมายถึงตรวจสอบเฉพาะ Control ที่เป็น Textbox เท่านั้น
8 @R07147
เอาใหม่เลยนะครับ
ผมมีtextbox แบบนี้ ทั้งหมด 4 ตัว
--------------------------------------------------------------------
รหัสสินค้า จำนวน ราคา มูลค่าเงิน
--------------------------------------------------------------------
[ ] [ ] [ ] [ ]
case ที่ 1 ข้อมูลที่ได้มามีรหัสสินค้าอยู่แล้ว
[A-001] [ 10 ] [ 100 ] [ 1000 ]
ถ้าเราไป click ที่ช่องจำนวนก็จะไม่มีปัญหาอะไร
case ที่ 2 ยังไม่ได้ระบุรหัสสินค้า แต่เราอาจจะเผลอไป Click ที่ ช่องจำนวน หรือช่องราคา ฯลฯ ผมอยากจะบังคับให้ไป Focus ที่รหัสสินค้าก่อน ผมก็ใส่ code แบบที่บอกนะครับ แต่ไงมันดันขึ้น error 2110 ไม่รู้
ผมมีtextbox แบบนี้ ทั้งหมด 4 ตัว
--------------------------------------------------------------------
รหัสสินค้า จำนวน ราคา มูลค่าเงิน
--------------------------------------------------------------------
[ ] [ ] [ ] [ ]
case ที่ 1 ข้อมูลที่ได้มามีรหัสสินค้าอยู่แล้ว
[A-001] [ 10 ] [ 100 ] [ 1000 ]
ถ้าเราไป click ที่ช่องจำนวนก็จะไม่มีปัญหาอะไร
case ที่ 2 ยังไม่ได้ระบุรหัสสินค้า แต่เราอาจจะเผลอไป Click ที่ ช่องจำนวน หรือช่องราคา ฯลฯ ผมอยากจะบังคับให้ไป Focus ที่รหัสสินค้าก่อน ผมก็ใส่ code แบบที่บอกนะครับ แต่ไงมันดันขึ้น error 2110 ไม่รู้
9 @R07148
ลืมบอก code ที่ใส่
sub txt2_gotfocus
if txt1.value <> "" then
txt1.setfocus
endif
sub txt3_gotfocus
if txt1.value <> "" then
txt1.setfocus
endif
sub command1_click
txt2.setfocus
endsub
* หมายเหตุ ปัญหามันเกิดตอนที่ผมกดปุ่ม command1_click นะครับ และข้อมูลที่ได้มาเป็นแบบ case ที่ 2 (ลืมบอก) เหมือนประมาณว่า มันกำลังจะถูกสั่งให้มา focus ที่ txt2 แต่โดนบังคับให้ไป focus อีกที ที่ txt1 มันเลย error หรือเปล่าครับ
sub txt2_gotfocus
if txt1.value <> "" then
txt1.setfocus
endif
sub txt3_gotfocus
if txt1.value <> "" then
txt1.setfocus
endif
sub command1_click
txt2.setfocus
endsub
* หมายเหตุ ปัญหามันเกิดตอนที่ผมกดปุ่ม command1_click นะครับ และข้อมูลที่ได้มาเป็นแบบ case ที่ 2 (ลืมบอก) เหมือนประมาณว่า มันกำลังจะถูกสั่งให้มา focus ที่ txt2 แต่โดนบังคับให้ไป focus อีกที ที่ txt1 มันเลย error หรือเปล่าครับ
10 @R07150
จากโค้ด กท.R07148 เมื่อ Command1_Click ทำงาน โปรแกรมจะสูญเสียการควบคุมเมื่อทำงานที่กระบวนการ txt2_GotFocus เสร็จสิ้น
ตัวอย่างเช่น (สมมติมี Text1, Text2, Text3, Command1)
ถ้าต้องการ SetFocus ไปที่ Text2,Text3 แ้้ล้วทำการตรวจสอบข้อมูล เมื่อกด Command1
---------------------------------------------1
Private Sub Command1_Click()
Text2.SetFocus
End sub
Private Sub Text2_GotFocus()
Text3.SetFocus
End sub
Private Sub Text3_GotFocus()
If isnull(Text1) then
Text1.SetFocus
End If
End sub
---------------------------------------------2
แทนที่จะเขียนคำสั่งที่ถูกต้องดังนี้
Private Sub Command1_Click()
Text2.SetFocus
Text3.SetFocus
If isnull(Text1) then
Text1.SetFocus
End If
End sub
***หมายเหตุ
ถ้ามองดูเผิน ๆ หรือคิดอย่างที่คนเราเข้าใจ มันก็ไม่น่าจะผิด
ตัวอย่างเช่น (สมมติมี Text1, Text2, Text3, Command1)
ถ้าต้องการ SetFocus ไปที่ Text2,Text3 แ้้ล้วทำการตรวจสอบข้อมูล เมื่อกด Command1
---------------------------------------------1
Private Sub Command1_Click()
Text2.SetFocus
End sub
Private Sub Text2_GotFocus()
Text3.SetFocus
End sub
Private Sub Text3_GotFocus()
If isnull(Text1) then
Text1.SetFocus
End If
End sub
---------------------------------------------2
แทนที่จะเขียนคำสั่งที่ถูกต้องดังนี้
Private Sub Command1_Click()
Text2.SetFocus
Text3.SetFocus
If isnull(Text1) then
Text1.SetFocus
End If
End sub
***หมายเหตุ
ถ้ามองดูเผิน ๆ หรือคิดอย่างที่คนเราเข้าใจ มันก็ไม่น่าจะผิด
Time: 0.3294s