Thaiadmin

ตอบ

Warning: this topic has not been posted in for at least 90 days.
Unless you're sure you want to reply, please consider starting a new topic.
ชื่อ:
อีเมล์:
หัวข้อ:
ไอค่อนข้อความ:

Verification:
พิมพ์ตัวเลขไทย 99:

shortcuts: กด alt+s เพื่อตั้งกระทู้ หรือ alt+p แสดงตัวอย่าง


สรุปหัวข้อ

ข้อความโดย: atom-soft
« เมื่อ: 22 มกราคม 2018, 00:40:22 »

สาเหตุที่ใช้ Change ไม่ได้น่ะหรือครับ เป็นเพราะว่าช่องที่ท่านจะทำการแก้ไข Format คือช่องเดียวกับที่ท่านกำลังป้อนไงล่ะครับ

ถ้าลอง Textbox1 สำหรับป้อนข้อมูล ใน Event Change ของ Textbox1 ก็ใส่คำสั่งดังนี้.-

Private Sub Textbox1 _Change()
    Textbox2.Text = Format(CDec(TextBox1.Text), "##,##0.00")
End Sub

ซี่งคำสั่งจะถูกกระทำเมื่อมีการเปลี่ยนแปลงค่าใน Textbox1 แต่จะแสดงในผลลัพธ์ใน Textbox2
ทีนี้ลองนึกภาพดูว่าถ้าเป็นคำสั่งแบบนี้


Private Sub Textbox1 _Change()
    Textbox1.Text = Format(CDec(TextBox1.Text), "##,##0.00")
End Sub

ซี่งคำสั่งจะถูกกระทำเมื่อมีการเปลี่ยนแปลงค่าใน Textbox1 และ  จะแสดงในผลลัพธ์ใน Textbox1 เช่นกันลองจินตนาการเอาเองครับ ว่าเราจะป้อนตัวเลขได้ตรงตามที่เราอยากป้อนไหม

ดังนั้นนี่คือเหตุที่ทำไมใช้ได้กับเหตุการ์ LostFocus() เท่านั้น



ข้อความโดย: nongjuneza
« เมื่อ: 18 สิงหาคม 2010, 08:55:03 »

 ;D ;D ;D ;D

พอมาถูกทางก็ได้เลยครับ ต้องใส่ที่นี้ครับ

Private Sub Text1_LostFocus()

ขอบคุณมากครับผม งมอยู่นาน เส้นผมบังภูเขาจริง ๆ  ;D
เมื่อ: 18 สิงหาคม 2010, 08:46:29
Private Sub Text1_Change()
    Text1.Text = Format(Text1.TabIndex, "#,##0.00")
End Sub

เหตุการณ์บรรทัดแรกน่ะถูกแล้ว ผมก็ทำโดยใช้เหตุการณ์ change() ค่าออกมาก็ถูกต้อง 

แต่ลองดูบรรทัดที่สอง ตรง Text1.TabIndex นี่มันแปลกๆน่ะครับ ค่าที่ออกมาผิดน่าจะเป็นตรงนี้นี่แหละ มันไปเอาค่า index ในหน่วยความจำมาแสดงผลหรือป่าว เพราะที่จริงมันต้องเป็น text1.text แบบตัวอย่างด้านล่างนี้

TextBox1.Text = Format(CDec(TextBox1.Text), "##,##0.00")

ผมพิมพ์ผิดเองครับ แต่ใน VB ผมเป็น Text ก็ไม่ได้ครับ เป็นอย่างที่แจ้งให้ทราบครับ แต่ตอนนี้ไปใส่ใน

Private Sub Text1_LostFocus() ถึงจะได้ครับ ขอบคุณมากนะครับ  :)
เมื่อ: 18 สิงหาคม 2010, 08:50:16
ขออภัย Edit ข้อความไม่ได้ครับจะเพิ่มสักนิด

คือใครพอจะอธิบายได้ไหมครับเพราะอะไรถึงใช้

Change() ไม่ได้แต่ต้องมาใช้ LostFocus อยากจะทำความเข้าใจและหาสาเหตุครับ  :-\
ข้อความโดย: mrjenova
« เมื่อ: 18 สิงหาคม 2010, 08:45:15 »

Private Sub Text1_Change()
    Text1.Text = Format(Text1.TabIndex, "#,##0.00")
End Sub

เหตุการณ์บรรทัดแรกน่ะถูกแล้ว ผมก็ทำโดยใช้เหตุการณ์ change() ค่าออกมาก็ถูกต้อง 

แต่ลองดูบรรทัดที่สอง ตรง Text1.TabIndex นี่มันแปลกๆน่ะครับ ค่าที่ออกมาผิดน่าจะเป็นตรงนี้นี่แหละ มันไปเอาค่า index ในหน่วยความจำมาแสดงผลหรือป่าว เพราะที่จริงมันต้องเป็น text1.text แบบตัวอย่างด้านล่างนี้

TextBox1.Text = Format(CDec(TextBox1.Text), "##,##0.00")
ข้อความโดย: nongjuneza
« เมื่อ: 18 สิงหาคม 2010, 08:39:48 »

ขนาดทำทุกรูปแบบขนาดนี้แล้วยังมีปัญหาอีก

ลองดูสิว่าตอนที่สั่งโปรแกรมทำงานเนี่ยคุณทำ Event ตอนไหน

ตรวสอบความเป็นไปได้ระหว่างค่าเดิมกับการ แสดงค่าหลายรูปแบบ

ตัวอย่างเช่น

Private Sub Command1_Click()
 Dim iTest As Double
 
 iTest = Text1.Text
 
 Text2.Text = Format(iTest, "#,##0.00")
 
 MsgBox (iTest)
 
 
End Sub

ผลลัพท์ที่ได้ตามภาพเลยครับ


ถ้ายังติดปัญหาอีกเป็นที่เครื่องคุณแล้วละครับที่อาจจะมีปัญหา

ถ้าทำแบบที่คุณบอกนี้ได้เลยครับถูกต้อง แต่ผมต้องการแบบนี้ครับ

Private Sub Text1_Change()
    Text1.Text = Format(Text1.TabIndex, "#,##0.00")
End Sub

หรือว่าเป็นเพราะผมไปใส่ไว้ใน change() เลยมีอาการผิดปกติ หรือว่ามันต้องมีเทคนิค ถึงจะทำได้

เริ่มมาถูกทางแล้ว ขอบคุณมากครับ เดี๋ยวหาสาเหตุต่อไป  :)
ข้อความโดย: พริกหยวกอินเตอร์
« เมื่อ: 17 สิงหาคม 2010, 08:45:42 »

ขนาดทำทุกรูปแบบขนาดนี้แล้วยังมีปัญหาอีก

ลองดูสิว่าตอนที่สั่งโปรแกรมทำงานเนี่ยคุณทำ Event ตอนไหน

ตรวสอบความเป็นไปได้ระหว่างค่าเดิมกับการ แสดงค่าหลายรูปแบบ

ตัวอย่างเช่น

Private Sub Command1_Click()
 Dim iTest As Double
 
 iTest = Text1.Text
 
 Text2.Text = Format(iTest, "#,##0.00")
 
 MsgBox (iTest)
 
 
End Sub

ผลลัพท์ที่ได้ตามภาพเลยครับ


ถ้ายังติดปัญหาอีกเป็นที่เครื่องคุณแล้วละครับที่อาจจะมีปัญหา
ข้อความโดย: mrjenova
« เมื่อ: 11 สิงหาคม 2010, 20:52:28 »

ถ้าคุณลองแล้วได้ชัว ผมว่าเครื่องผม format อะไรบ้างอย่างคงจะเพี้ยน

เพราะทำแล้ว พอพิมพ์ 12345 กลายเป็น 52,341.00  :'( เกิดอะไรขึ้นเนี้ย

ลองลง VB ใหม่สิครับ อาจจะเพี้ยนตรงนี้ก็ได้ น่ะครับ  หรือไม่ก็ลอง new project ใหม่เลยครับ  ถ้าไม่ได้อีก ก็คงเป็นที่เครื่องคุณแล้วแหละ
ข้อความโดย: nongjuneza
« เมื่อ: 11 สิงหาคม 2010, 20:40:23 »

ลองแบบนี้หรือยังครับ

TextBox1.Text = Format(CDec(TextBox1.Text), "##,##0.00")

ทดสอบแล้วได้ชัว

ถ้าคุณลองแล้วได้ชัว ผมว่าเครื่องผม format อะไรบ้างอย่างคงจะเพี้ยน

เพราะทำแล้ว พอพิมพ์ 12345 กลายเป็น 52,341.00  :'( เกิดอะไรขึ้นเนี้ย
ข้อความโดย: mrjenova
« เมื่อ: 11 สิงหาคม 2010, 15:52:27 »

ลองแบบนี้หรือยังครับ

TextBox1.Text = Format(CDec(TextBox1.Text), "##,##0.00")

ทดสอบแล้วได้ชัว
ข้อความโดย: nongjuneza
« เมื่อ: 11 สิงหาคม 2010, 15:29:23 »

ลอง 

Text1.Text = Format(CCur(Text1.Text),"#,###.##")    >>> vb6.0

ผลออกมาจาการคีย์ 12345 เป็น 52,341สงสัยจะยาวครับงานนี้  :-\
เมื่อ: 09 สิงหาคม 2010, 17:19:56
มีใครพอจะทราบวิธีแก้ไขบ้างครับ
ข้อความโดย: SamaKitty VB
« เมื่อ: 9 สิงหาคม 2010, 16:43:45 »

Text1.Text = Format(val(Text1.Text),"#,000.00")    >>> vb6.0

พอผมเขียนคำสั่งนี้ ผลได้ที่ได้ จาก 12345 กลายเป็น พิพม์  1 มันโชว์ 001.00 พอพิมพ์2 มันโชว์ 002.00 จนถึง 005.00 ปวดตึบครับ ไม่รู้เพราะอะไร

ลอง 

Text1.Text = Format(CCur(Text1.Text),"#,###.##")    >>> vb6.0
ข้อความโดย: nongjuneza
« เมื่อ: 9 สิงหาคม 2010, 16:36:49 »

ลืมอีกอันครับ ตองแปลงให้เป็นตัวเลขก่อนเพราะค่าที่รับมามันเป็น String

Text1.Text = Format(cint(Text1.Text),"#,000.00")    >>> vb.net


Text1.Text = Format(val(Text1.Text),"#,000.00")    >>> vb6.0



Text1.Text = Format(val(Text1.Text),"#,000.00")    >>> vb6.0

พอผมเขียนคำสั่งนี้ ผลได้ที่ได้ จาก 12345 กลายเป็น พิพม์  1 มันโชว์ 001.00 พอพิมพ์2 มันโชว์ 002.00 จนถึง 005.00 ปวดตึบครับ ไม่รู้เพราะอะไร
ข้อความโดย: พริกหยวกอินเตอร์
« เมื่อ: 9 สิงหาคม 2010, 15:44:22 »

ลืมอีกอันครับ ตองแปลงให้เป็นตัวเลขก่อนเพราะค่าที่รับมามันเป็น String

Text1.Text = Format(cint(Text1.Text),"#,000.00")    >>> vb.net


Text1.Text = Format(val(Text1.Text),"#,000.00")    >>> vb6.0

ข้อความโดย: nongjuneza
« เมื่อ: 9 สิงหาคม 2010, 11:32:55 »

จริงๆ แล้วตามหลักจะเป็นแบบนี้อะครับ
Text1.Text = Format(Text1.Text,"#,000.00")  ประมาณนี้ เพราะถ้าใส่ "###" ทั้งหมดเลยมันจะหาค่าไม่ได้ค่าที่ออกมาจะผิดครับ

ผมลองเปลี่ยน Format จาก  #,### เป็น #,000 แล้วคีย์ 12345 มันออกมาเป็นแบบนี้ครับ 3,452,001
ข้อความโดย: พริกหยวกอินเตอร์
« เมื่อ: 9 สิงหาคม 2010, 08:39:31 »

จริงๆ แล้วตามหลักจะเป็นแบบนี้อะครับ
Text1.Text = Format(Text1.Text,"#,000.00")  ประมาณนี้ เพราะถ้าใส่ "###" ทั้งหมดเลยมันจะหาค่าไม่ได้ค่าที่ออกมาจะผิดครับ
ข้อความโดย: nongjuneza
« เมื่อ: 8 สิงหาคม 2010, 18:42:22 »

คือผมใช้ textbox รับค่าตัวเลข แต่ไม่มีการเชื่อมต่อฐานข้อมูลใด ๆ ทั้งสิ้น แต่พอเวลาคีย์ข้อมูล ที่เป็นตัวเลข จำนวนเกินหลักร้อยมันจะเป็น 123456 โดยไม่มี ตัว , คั่น 3 หลัก ผมเลยใช้ format โดยเขียนแบบนี้

Text1 = Format(Text1, "#,###") แต่พอคีย์เข้าไปเป็นหลักพัน ก็ OK ครับ แต่พอคีย์ไปเป็นหลักหมื่น จะกลายเป็นแค่หลักพัน พอหลักหมื่น ตัวสุดท้ายจะ ขึ้นมาอยู่ข้างหน้า เช่น ผมต้องการพิมม์ตัวเลข 12345 มันควรขึ้น
12,345 แต่มันเป็น 51,234

ผมคิดว่าผมตั้งค่า Format น้อยไปมั้ง เลยเปลี่ยน Format เป็น "#,###,###" มันก็เป็นเหมือนเดิมครับ คือพิมพ์ 12345 มันก็ขึ้น51,234

รบกวนด้วยครับ