กระทู้เก่าบอร์ด อ.Yeadram
1,222 5
URL.หัวข้อ /
URL
object index
ในการวาง Object แต่ละตัว มันจะมี Index ของมัน ใน Form
ผมอยากรู้ว่าดูตรงไหนครับ แล้วแก้ไขได้หรือไม่ครับ
เช่น Command1 มี index = 0
LISTBOX3 มี index =1
ผมอยากรู้ว่าดูตรงไหนครับ แล้วแก้ไขได้หรือไม่ครับ
เช่น Command1 มี index = 0
LISTBOX3 มี index =1
5 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R04303
ใน Form Design เปิด Property Sheet ดูที่ Other tab จะเห็น Tab Index property อยู่ในนั้นครับ สามารถป้อนแก้ไขได้
2 @R04306
หมายถึง ดรรชนีแท็บ ใช่ไหมครับ งั้นรบกวน อาจารย์ดู CODE นี้ให้หน่อยครับ
Dim i As Integer
i = 0
Do Until i > 12
On Error Resume Next
MsgBox i
MsgBox Me(i).Name
i = i + 1
Loop
ผมเขียนมาทดสอบตามความเข้าใจของผม ในที่นี้ผมเข้าใจว่า i คือ
index เมื่อทดสอบ ค่า i =0 , me(0) ทำไมไม่ตรงกับ TAB index ที่กำหนดไว้ครับ เช่น ผมกำหนด TEXTBOX 1 มี TAB index=0 แต่เมื่อ RUN ด้วย CODE
มันได้คำตอบเป็น ตัวอื่น
Dim i As Integer
i = 0
Do Until i > 12
On Error Resume Next
MsgBox i
MsgBox Me(i).Name
i = i + 1
Loop
ผมเขียนมาทดสอบตามความเข้าใจของผม ในที่นี้ผมเข้าใจว่า i คือ
index เมื่อทดสอบ ค่า i =0 , me(0) ทำไมไม่ตรงกับ TAB index ที่กำหนดไว้ครับ เช่น ผมกำหนด TEXTBOX 1 มี TAB index=0 แต่เมื่อ RUN ด้วย CODE
มันได้คำตอบเป็น ตัวอื่น
3 @R04308
ไม่จำเป็นต้องได้ออกมาเป็นอ๊อปเจ็คเดียวกันหรอกครับ เพราะการอ้าง Me(i) (ซึ่งรูปเต็มๆคือ Me.Controls(i)) หมายถึงอ๊อปเจ็คตัวที่ i ใน Controls collection ลำดับการเกิดของอ๊อปเจ็คใน Controls collection ขึ้นกับเราวางคอนโทรลอะไรก่อนหลังลงบนฟอร์ม ซึ่งอาจจะไม่ใช่ Textbox control อย่างเดียวก็ได้ เช่น ปกติการวาง textbox ลงบนฟอร์ม ก็จะมี Label control ของ textbox นั้นแปะเข้ามาด้วย ดังนั้น textbox อาจได้ลำดับแรก ส่วน label ก็ได้ลำดับที่สอง ส่วน TabIndex property นั้นเป็นกำหนดลำดับของโฟกัสบนฟอร์ม แต่จะไม่สามารถกำหนดให้แก่ label control ได้ เพราะ label ไม่สามารถรับโฟกัสได้ หรือภายหลังเรามาเปลี่ยนลำดับของ TabIndex เอาเอง เหล่านี้ก็เป็นเหตุผลที่ทำให้ ค่าสองค่านี้ ไม่จำเป็นต้องหมายถึงอ๊อปเจ็คตัวเดียวกันก็ได้
4 @R04309
กระจ่างครับ ขอถามต่อในเรื่องนี้ครับ
ผมพยายามจะ อ้าง Index เพื่อเขียน แทนการอ้างชื่อ
เช่น Me.ID = Rs.Fields("ID") เพราะความขี้เกียจไล่ทีละชื่อ
Sub DisplayFields()
Dim i As Integer
i = 0
Do Until i > 12
On Error Resume Next
Me(i) = Rs(i)
i = i + 1
Loop
End Sub
ซึ่งแน่นอนว่าไม่ถูกต้อง จะมีแนวทางอย่างไรครับ
ผมพยายามจะ อ้าง Index เพื่อเขียน แทนการอ้างชื่อ
เช่น Me.ID = Rs.Fields("ID") เพราะความขี้เกียจไล่ทีละชื่อ
Sub DisplayFields()
Dim i As Integer
i = 0
Do Until i > 12
On Error Resume Next
Me(i) = Rs(i)
i = i + 1
Loop
End Sub
ซึ่งแน่นอนว่าไม่ถูกต้อง จะมีแนวทางอย่างไรครับ
5 @R04314
วิธีที่น่าจะทำได้ง่ายๆคือ ตั้ง textbox ให้มีชื่อเหมือนกันแต่ลงท้ายด้วยตัวเลข เช่น txt01, txt02, ... , txt12 แล้วเขียนโค้ดให้เป็น
For i = 0 to 12
Me("txt" & format$(i,"00")) = Rs.Fields(i)
Next i
หมายเหตุ : วิธีนี้ไม่ได้สนใจ TabIndex ครับ
For i = 0 to 12
Me("txt" & format$(i,"00")) = Rs.Fields(i)
Next i
หมายเหตุ : วิธีนี้ไม่ได้สนใจ TabIndex ครับ
Time: 0.5401s