Thaiadmin

Developer Zone => App Development => ข้อความที่เริ่มโดย: nongjuneza ที่ 8 สิงหาคม 2010, 18:42:22

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

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

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

รบกวนด้วยครับ
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: พริกหยวกอินเตอร์ ที่ 9 สิงหาคม 2010, 08:39:31
จริงๆ แล้วตามหลักจะเป็นแบบนี้อะครับ
Text1.Text = Format(Text1.Text,"#,000.00")  ประมาณนี้ เพราะถ้าใส่ "###" ทั้งหมดเลยมันจะหาค่าไม่ได้ค่าที่ออกมาจะผิดครับ
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: nongjuneza ที่ 9 สิงหาคม 2010, 11:32:55
จริงๆ แล้วตามหลักจะเป็นแบบนี้อะครับ
Text1.Text = Format(Text1.Text,"#,000.00")  ประมาณนี้ เพราะถ้าใส่ "###" ทั้งหมดเลยมันจะหาค่าไม่ได้ค่าที่ออกมาจะผิดครับ

ผมลองเปลี่ยน Format จาก  #,### เป็น #,000 แล้วคีย์ 12345 มันออกมาเป็นแบบนี้ครับ 3,452,001
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: พริกหยวกอินเตอร์ ที่ 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

หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: 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 ปวดตึบครับ ไม่รู้เพราะอะไร
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: 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
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: nongjuneza ที่ 11 สิงหาคม 2010, 15:29:23
ลอง 

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

ผลออกมาจาการคีย์ 12345 เป็น 52,341สงสัยจะยาวครับงานนี้  :-\
เมื่อ: 09 สิงหาคม 2010, 17:19:56
มีใครพอจะทราบวิธีแก้ไขบ้างครับ
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: mrjenova ที่ 11 สิงหาคม 2010, 15:52:27
ลองแบบนี้หรือยังครับ

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

ทดสอบแล้วได้ชัว
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: nongjuneza ที่ 11 สิงหาคม 2010, 20:40:23
ลองแบบนี้หรือยังครับ

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

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

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

เพราะทำแล้ว พอพิมพ์ 12345 กลายเป็น 52,341.00  :'( เกิดอะไรขึ้นเนี้ย
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: mrjenova ที่ 11 สิงหาคม 2010, 20:52:28
ถ้าคุณลองแล้วได้ชัว ผมว่าเครื่องผม format อะไรบ้างอย่างคงจะเพี้ยน

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

ลองลง VB ใหม่สิครับ อาจจะเพี้ยนตรงนี้ก็ได้ น่ะครับ  หรือไม่ก็ลอง new project ใหม่เลยครับ  ถ้าไม่ได้อีก ก็คงเป็นที่เครื่องคุณแล้วแหละ
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: พริกหยวกอินเตอร์ ที่ 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

ผลลัพท์ที่ได้ตามภาพเลยครับ
(http://uppic.net/full/075af494fd6b61a6c6f410c09072836f) (http://uppic.net/show/075af494fd6b61a6c6f410c09072836f)

ถ้ายังติดปัญหาอีกเป็นที่เครื่องคุณแล้วละครับที่อาจจะมีปัญหา
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: 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

ผลลัพท์ที่ได้ตามภาพเลยครับ
(http://uppic.net/full/075af494fd6b61a6c6f410c09072836f) (http://uppic.net/show/075af494fd6b61a6c6f410c09072836f)

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

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

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

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

เริ่มมาถูกทางแล้ว ขอบคุณมากครับ เดี๋ยวหาสาเหตุต่อไป  :)
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: 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")
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: 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 อยากจะทำความเข้าใจและหาสาเหตุครับ  :-\
หัวข้อ: Re: การตั้ง Format ของ Textbox ให้เป็น Currency
เริ่มหัวข้อโดย: 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() เท่านั้น