ฝึกเขียนโปรแกรมพื้นฐานด้วย Visual C#
ความรู้ด้านการเขียนโปรแกรมสำหรับผู้เริ่มต้น แม้ไม่เคยเขียนโปรแกรมมาก่อนก็เข้าใจได้ไม่ยาก
ผู้เขียน: สร้างโดย: อ.โอ๊ค - อนุญาติให้: แก้ไขได้โดยสมาชิกทุกคน ชมแล้ว: 377,509 ครั้ง
post ครั้งแรก: Sun 31 May 2009, 9:54 pm ปรับปรุงล่าสุด: Mon 25 July 2011, 10:53 pm
อยู่ในส่วน: ไม่ได้ระบุว่าให้อยู่ห้องใด

หน้าที่ 12 - Data Structure Foundation (โครงสร้างข้อมูลพื้นฐาน)

เมื่อโปรแกรมมีขนาดใหญ่ขึ้นก็ต้องมีตัวแปรมารองรับเพิ่มมากขึ้น และปัญหาที่จะตามมาก็คือการที่จะต้องประกาศตัวแปรมากมาย อีกทั้งการที่จะใส่ค่าให้ตัวแปรนั้นๆดูจะวุ่นวายมากในกรณีที่มีตัวแปรเยอะจะสับสนได้ง่าย โครงสร้างข้อมูลเป็นแนวคิดที่จะลดปัญหานี้นั่นเอง เราสามารถนำตัวแปรประเภทเดียวกันมาจัดหมวดหมู่ให้สะดวกต่อการเรียกใช้ เรามาดูโครงสร้างข้อมูลที่ผมกำลังพูดถึงกันเลยดีกว่าครับ


Array (อารเรย์)
คือ การประกาศตัวแปรสำหรับเก็บข้อมูลชนิดเดียวกันโดยหลายๆตัวแปร สามารถระบุจำนวนของตัวแปรที่ต้องการใช้ได้ ภายในโค้ดเพียงบรรทัดเดียว โดยมีเลขลำดับหรือ ดัชนี(index) เป็นตัวชี้บอกตำแหน่ง ของที่อยู่ของค่านั้นๆ กล่าวสั้นๆคือ ตัวแปรชนิดอารเรย์ จะมีชื่ออ้างอิงเดียวกัน เพียงแต่มีเลขลำดับเป็นตัวบอกถึงตำแหน่งของค่าต่างๆในอารเรย์นั้นๆ

ทำไมผมถึงใช้คำว่าตำแหน่ง เนื่องจากว่าอารเรย์ที่เราพูดถึงนั้นไม่ได้เก็บข้อมูลในแนวเดียวครับ (ให้นึกถึงตารางครับ หรือเมทริกต์ก็ได้ครับ) แนวเดียวกันที่ผมหมายถึงคือข้อมูลที่เรียงเป็นแถวเหมือนตารางแถวเดียวน่ะครับ แต่อารเรย์สามารถเก็บข้อมูลได้ในรูปแบบคล้ายๆกับเมทริกต์(ตาราง)ที่มีสมาชิกเมทริกต์(ตาราง)ภายในเป็นข้อมูล ส่วนในหัวข้อถัดไปจะขอพูดถึงอารเรย์ 1 มิติก่อน จากนั้นจะมาพูดกันถึงอารเรย์หลายมิติครับ



แนวคิดของอารเรย์คือ การสร้างตัวแปรขึ้นมาเก็บข้อมูลชนิดเดียวกันหลายๆค่าในตัวแปรเดียว




อารเรย์ 1 มิติ


รูปแบบการประกาศอารเรย์


(ชนิดของข้อมูลตัวแปรอารเรย์) [] (ชื่อของอารเรย์) ;


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


int [] myArray ;


 


นี่คือการประกาศตัวแปรอารเรย์ชื่อ myArray ชนิด integer โดยยังไม่เสร็จครับเพราะโค้ดนี้ยังไม่ได้ระบุจำนวนตัวแปรอารเรย์ที่ต้องการ


การประกาศตัวแปรอารเรย์พร้อมกำหนดจำนวนของตัวแปรอารเรย์


(ชนิดของข้อมูลตัวแปรอารเรย์) [] (ชื่อของอารเรย์) = new (ชนิดของตัวแปรอันแรก)[จำนวนของตัวแปรอารเรย์ที่ต้องการ];

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

int [] a = new int[7] ;



จากโค้ดด้านบนคือการประกาศตัวแปรอารเรย์ชนิด integer ชื่อ a จำนวน 7 ตัวแปร โดยมีเลขลำดับ (index) เริ่มตั้งแต่ 0-6 ( ตัวแปรอารเรย์มี 7 ตัวก็จริง แต่ลำดับของอารเรย์โดยเริ่มจาก 0 เสมอ)
จากภาพด้านบนเป็นตัวแปรทั้ง 7 ตัวที่เกิดจากการประกาศอารเรย์ออกมา ซึ่งเราจะใช้เลขในช่อง [ ] ในการอ้างอิงถึงตัวแปรนั้นๆเสมอ

รูปแบบการประกาศตัวแปรอารเรย์พร้อมทั้งใส่ค่าเริ่มต้น

int
[] countNum = {1,2,3,4,5,6,7,8,9} ;


นี่คือตัวอย่างของการประกาศตัวแปรอารเรย์พร้อมทั้งใส่ค่าลงไป ซึ่งข้อมูลที่ใส่เข้าไปจะจัดเรียงเป็นลำดับโดยเริ่มจาก 0 เรียงจาก ค่า 1 ไปถึง 9 จะได้ดังนี้คือ


countNum[0] มีค่าเท่ากับ 1
countNum[1] มีค่าเท่ากับ 2
countNum[2] มีค่าเท่ากับ 3
...
...
countNum[8] มีค่าเท่ากับ 9


หมายถึงว่าคุณต้องรู้ทันทีว่า index ต่างๆ ของอารเรย์นั้นมีค่าใดอยู่บ้าง เมื่อเราใส่ค่าในลักษณะแบบนี้ จะเห็นได้ว่าง่ายกว่ามากที่เราจะมาประกาศตัวแปรแบบธรรมดาและใส่ค่าหลายๆค่าเข้าไปไม่เพียงเฉพาะชนิด int เท่านั้นนะครับ เป็นข้อมูลชนิดอื่นก็ได้ แต่ถ้าเป็น string ก็ต้องมีเครื่องหมาย " " ครอบข้อความเอาไว้ก็เท่านั้นเองครับ

รูปแบบการประกาศตัวแปรอารเรย์พร้อมทั้งใส่ขนาดของอารเรย์ และใส่ค่าเริ่มต้น

int [] a = new int[5] {1,2,3,4,5} ;

นี่เป็นตัวอย่างการประกาศตัวแปรอารเรย์แบบใส่ขนาด และ ใส่ค่าเริ่มต้นพร้อมกัน โดยผลลัพธ์ที่ได้ เราจะได้อารเรย์ a ที่มีขนาด 5 ตัวแปร และค่าต่างๆ เรียงลำดับจากซ้ายไปขวา ไปใส่ในแต่ละ index ของตัวแปร ตั้งแต่ 0 - 4

a[0] มีค่าเท่ากับ 1
a[1] มีค่าเท่ากับ 2
a[2] มีค่าเท่ากับ 3
a[3] มีค่าเท่ากับ 4
a[4] มีค่าเท่ากับ 5

*** ข้อควรระวัง การประกาศตัวแปรอารเรย์รูปแบบนี้ เมื่อกำหนดขนาดแล้ว ต้องกำหนดค่าให้เท่ากับจำนวนของขนาดที่ประกาศไว้เท่านั้น

ตัวอย่างที่ผิด

int [] b = new int[5] {1,2,3} ;

จะเห็นว่าการประกาศดังโค้ดด้านบนผิดรูปแบบคือ กำหนดจำนวนค่าน้อยกว่าจากที่ประกาศขนาดเอาไว้

int [] b = new int[5] {1,2,3,4,5,6} ;

จะเห็นว่าการประกาศดังโค้ดด้านบนผิดรูปแบบคือ กำหนดจำนวนค่ามากกว่าจากที่ประกาศขนาดเอาไว้

การเข้าถึงข้อมูลในอารเรย์และการใส่ค่าให้ตัวแปรอารเรย์

ในส่วนนี้เราจะเห็นถึงความสะดวกสบายทั้งในการเข้าถึงข้อมูลหรืออ้างอิงข้อมูล และการใส่ค่าให้ตัวแปรอารเรย์ที่มีจำนวนมากๆครับ ผมขอยกตัวอย่างประกอบไปเลยแล้วกัน (สมมติมีการประกาศตัวแปรอารเรย์ชื่อ myArray เอาไว้แล้วจำนวน 9 ตัวแปร) myArray[5] จะเป็นการอ้างอิงถึงข้อมูลในตำแหน่ง index ที่ 5 ของตัวแปรอารเรย์ อาจพูดได้เลยว่าตัวแปรอารเรย์นั้นมีการอ้างอิงและเรียกใช้ที่คล้ายๆกันไม่ต่างกันมากครับ



อารเรย์หลายมิติ


อารเรย์หลายมิติคือการเก็บข้อมูลหรือค่าต่างๆในรูปแบบคล้ายๆกับตารางหรือสมาชิกในเมทริกซ์ครับ (ที่พูดถึงเมทริกซ์เพราะตัวเลขลำดับการอ้างอิงตำแหน่งของค่านั้นเหมือนการบอกมิติในเรื่องของเมทริกซ์เลยครับ) ถ้านึกไม่ออกให้เลื่อนย้อนขึ้นไปดูรูปทางด้านบนครับ ในส่วนของ Array หลายมิติ

รูปแบบการประกาศอารเรย์หลายมิติ

(ชนิดของข้อมูล) [ จำนวนของ , (ลูกน้ำ)เพื่อบอกจำนวนมิติ ] ชื่อของอารเรย์ ;

หรือประกาศจำนวนไปพร้อมกับการประกาศ

(ชนิดของข้อมูล) [ จำนวนของ , (ลูกน้ำ)เพื่อบอกจำนวนมิติ ] ชื่อของอารเรย์ = new (ชนิดข้อมูล)[ จำนวนของ , (เท่ากับด้านหน้า) ] ;

ตัวอย่างของการประกาศอารเรย์หลายมิติ

char [,] myChar = new char[3,3] ;

ผลจากการประกาศอารเรย์รูปแบบนี้จะได้อารเรย์ที่เก็บข้อมูลชนิด character (ตัวอักษร) ขนาด 3x3 หรือ จำนวน 3 แถว 3 หลัก ถ้าไม่เข้าใจให้ดูรูปด้านล่างประกอบครับ

จากการประกาศตัวแปรอารเรย์หลายมิติเราจะนับจำนวนตัวแปรที่ประกาศในรูปแบบนี้ได้จาก จำนวนช่องในแนวตั้งและแนวนอนตามจำนวนที่เราได้ระบุไว้ (ในตัวอย่างนี้มีจำนวนตัวแปร myChar ท้งหมด 9 ตัวแปร)








*หมายเหตุ งานเขียนชิ้นนี้ ได้รับการคุ้มครองสิทธิตามพระราชบัญญัติคุ้มครองสิทธิทางปัญญา โดยลิขสิทธิเป็นของผู้เขียน ที่ให้เกียรตินำเผยแพร่ผ่าน วิชาการ.คอม เรามีความยินดีและอนุญาตให้ทำซ้ำหรือเผยแพร่ต่อเพื่อประโยชน์ทางการศึกษาเท่านั้น กรุณาให้เกียรติผู้เขียน โดยอ้างชื่อผู้เขียนและ วิชาการ.คอม (www.vcharkarn.com) ทุกครั้งที่ทำการเผยแพร่ต่อ ห้ามนำส่วนหนึ่งส่วนใดไปเผยแพร่ต่อในสื่อที่เอื้อประโยชน์ทางธุรกิจก่อนได้รับอนุญาต ขอขอบคุณที่ร่วมกันช่วยสร้างให้สังคมไทยเป็นสังคมแห่งปัญญา






จำไว้ตลอด

จำนวน 43 ความเห็น, หน้า | 1 | 2 | 3 |
ความเห็น 24 11 ธ.ค. 2552 (13:37)

ขอบคุณมากๆค่ะ  พอดีได้เข้ามาอ่านเพราะว่าสนใจทางด้านนี้

ยังไงถ้าพี่ๆมาอะไรก็แนะนำด้วยนะค่ะ

เพราะอนากเรียนวิทยาการคอมมากๆเลยค่ะ


MinMint เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 25 15 เม.ย. 2553 (00:00)
ขอบคุณค่ะ
peat_24 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 53 ดวง - โหวตเพิ่มดาว

ความเห็น 26 29 มิ.ย. 2553 (19:44)
ได้ความรู้มากขึ้น ดีค่ะ

ขอบคุณ นะคะ

ขอให้มีแบบนี้ อีก ค่ะ

เข้า ใจ ง่ายขึ้น ด้วย

^ ^"
bellbom เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 52 ดวง - โหวตเพิ่มดาว

ความเห็น 27 5 ก.ค. 2553 (13:15)
เรียนกับอาจารย์ที่โรงเรียนไม่รู้เรื่องเลย
แต่พอมาอ่านเนื้อหาที่นี่ก็เข้าใจขึ้นมากเลยค่ะ
ขอบคุณมากค่ะ
gam2514 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน3 ครั้ง - ดาว 64 ดวง - โหวตเพิ่มดาว

ความเห็น 28 5 ก.ค. 2553 (13:22)
ขอบคุณมากเลยครับ
อย่างนี้สอบก็คงผ่านได้สบายเลย ^0^
oooTABooo เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 30 ดวง - โหวตเพิ่มดาว

ความเห็น 29 20 ก.ค. 2553 (11:02)
อ.ครับผมพึ่งศึกษาการเขียนโปรแกรมใหม่ๆๆเลย บทเรียนของอ.เป็นประโยชน์มาก พูดเข้าใจง่าย ผมกำลังจะเริ่มเขียนอยากให้แนะนำครับว่าจะเขียนC#เลยดีไหมหรือต้องเขียนภาษาที่ง่ายให้คล่องก่อน และC#กับJavaอัไหนใหม่กว่าครับ
noy_ap เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 30 20 ก.ค. 2553 (17:02)
สวัสดีค่ะ +++อาจารย์

หนูเพิ่งเข้ามาเป็นสมาชิก และตอนนี้หนูเรียนภาษา c# อยู่ซึ่งเรียนไม่รุเรื่องเลยค่ะ อาจารย์ที่โรงเรียนสอนหนู งงมาก
เวลาอาจารย์ให้รันโปรแกรม หฯทำไม่ได้หนูไม่เข้าใจ

หนูเลยอยากให้อาจารย็ช่วยสอนในเรื่องที่หนูไม่เข้าใจด้วยค่ะ

พร้อมโจทย์ตัวอย่าง มาให้หนูฝึกเขียนด้วยนะค่ะ (เอาเฉลยแนบมาด้วยนะค่ะ และอธิบายมาด้วยค่ะ)

ตอนนี้หนูกำลังเรียน
V
V
V

การประกาศตัวแปรและการตั้งชื่อ
การเรียกใช้โปรแกรม
การใช้วนลูป for while do while
คอลโทลต่างๆ
-from
-button
-tex box
-label
safpimo เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน2 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 31 24 ก.ค. 2553 (10:50)
ขอบคุณ คุณMinMint, peat_24, bellbom, gam2514, oooTABooo, noy_ap, safpimo มากครับสำหรับคำติชม และให้ความสนใจ เป็นกำลังใจให้ อ. อยากพัฒนาบทเรียนต่อไปนะ ^^

ตอบ คุณ noy_ap
C# ใหม่กว่า java ครับ แต่ที่ยังได้รับความนิยมมากๆในปัจจุบันยังเป็น java ครับ เนื่องด้วยมันเป็น open source
เลือกเขียน C# เป็นภาษาเริ่มต้นเลยก็ได้ครับ เพราะยังไงๆ ก็ถือเป็นภาษาระดับสูงอยู่แล้ว เข้าใจไม่ยากอยู่แล้วครับ (สู้ๆนะ เอาใจช่วย)

ตอบ คุณ safpimo
อ. ฟังไม่ผิดใช่มั้ย ระดับ โรงเรียนเดี๋ยวนี้สอน C# แล้วหรอเนี่ย
ถ้าใช่ก็ถือเป็นเรื่องดีนะครับ เอาเป็นว่าโจทย์ อ. จะหาเวลาว่างมาลงให้แล้วกันนะครับ ^^
Gaiden เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน28 ครั้ง - ดาว 111 ดวง - โหวตเพิ่มดาว

ความเห็น 32 22 ส.ค. 2553 (14:44)
อ.ค่ะ ถ้าเขียนโปรแกรม C# แบบ if else เขียนยังไงคะ
อ.ที่โรงเรียนสอนไม่ค่อยเข้าใจคะ
gam2514 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน3 ครั้ง - ดาว 64 ดวง - โหวตเพิ่มดาว

ความเห็น 33 24 ส.ค. 2553 (00:43)
ตอบคุณ gam2514

รายละเอียดการทำงาน if-else
อยู่ในหน้าที่ 10 เลยครับ ลองเปิดอ่านดูน้า
มีสงสัยตรงไหนก็ถามไว้ได้ครับ
Gaiden เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน28 ครั้ง - ดาว 111 ดวง - โหวตเพิ่มดาว

ความเห็น 34 24 ส.ค. 2553 (18:31)
สวัสดีครับ ผมพึ่งเข้าเจอเว็บนี้สุดยอดมากๆเลยครับข้อมูลดีๆมากๆ

ยังไงก็ช่วยลงต่อเรื่อยๆด้วยนะครับ

ขอบคุณครับ
lordpudding เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน2 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 35 24 ส.ค. 2553 (20:40)
ขอบคุณอ. มากค่ะ ละเอียดมากเลยค่ะ อย่างนี้สอบต้องติดอันดับ 1ใน 5 ได้แน่ๆ *-*
gam2514 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน3 ครั้ง - ดาว 64 ดวง - โหวตเพิ่มดาว

ความเห็น 36 31 ส.ค. 2553 (12:20)
อาจารย์ค่ะ มีการเรียนเพิ่มเรื่องการใ้ ฐานข้อมูลอยากให้อาจารย์ช่วย ให้ความรู้เรื่องญานข้อมูลเพิ่มขึ้นหน่อค่ะ
safpimo เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน2 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 37 31 ส.ค. 2553 (21:23)
อยากได้เรื่องยากๆต่อจากนี้จังเลยครับพอดีเดือนหน้าช่วง15มั้งผมต้องไปแข่งทักษะเขียนโปรแกรมแล้ว
คุณครูพอมีเวลาช่วยสอนเรื่องการทำพิรมิดได้ไหมครับพวกทริคต่างๆอ่าครับถ้าไม่ว่างก้ไม่เป็นไรครับ
เป็นกำลังใจให้ครับครูทำเว็บได้มีความรู้มากๆครับช่วยลงต่อไปเลื่อยๆด้วยนะครับ
lordpudding เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน2 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 38 24 ก.ย. 2553 (23:42)
โหย ขออภัยจริงๆครับ อ. ไม่ได้เข้ามานาน ด้วยความที่ไม่ว่าง
อ. มีสอนเยอะหน่อยครับ ช่วงนี้ไม่ค่อยมีเวลา
อ. จะพยามเจียดเวลาอย่างที่สุดมาทำตามคำเรียกร้องนะครับ ^^
Gaiden เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน28 ครั้ง - ดาว 111 ดวง - โหวตเพิ่มดาว

ความเห็น 39 30 ก.ย. 2553 (11:43)
ขอบคุณมากๆครับสำหรับบทความดีๆ ขอให้เว็บไซด์นี้อยู่คู่คนไทยไปอีกนานๆเลยนะครับ
Haris-pm เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 40 30 ต.ค. 2553 (08:39)
ถ้าต้องการคอนโทลtextboxให้เป็นตัวอักษร*จะทำยังไงคะ
Bucchytale เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 41 28 ก.พ. 2554 (10:07)
อาจารย์ครับ มีคำถามครับ
1. ไม่เคยเขียนprograme และไม่รู้เรื่องเลย
2. ได้ iPhone มา ทีแรกไม่สนใจเท่าไร พอลอง load app สนใจมาก อยากทำบ้าง
3. สนใจหมวด travel กับ game
4. พอออกแบบได้

ผมอยากทำบ้าง ควรนับ 1 ที่ C# หรือ objective-C ครับ
ผมเข้าใจอย่างนี้ถูกต้องหรือไม่ครับ
การทำแบ่งออกเป็น 3 ส่วน(ถ้ามีทิศทาง และ วัตถุประสงค์ในการทำแล้ว)
1. objective-c, 2. iphone programing, และ 3. หน้าตาของ app

ผมควรเริ่มที่ C# ก่อนหรือไม่ครับ หรือมุ่งตรงที่ objective-c เลย
ผมต้องตั้งใจจริงมากเป็นพิเศษเพราะไม่รู้อะไรเลย
นับถือ
sjk
sjk เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว

ความเห็น 42 25 มี.ค. 2554 (21:01)
ขอบคุณคร๊าฟฟๆๆ


อ่านแล้วเข้าใจง่ายมากเลย
parkkk123 เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 150 ดวง - โหวตเพิ่มดาว

ความเห็น 43 19 เม.ย. 2554 (18:41)
ผมมีเรื่องอยากถามเกียวกับ Visual C# หน่อยครับ คือผมพึ่งเรียน Visual C# แล้วอาจารย์ให้เขียน โปรแกรมเครื่องคิดเลข โดยใช้ TextBox 3 ตัว ให้ผลการคำนวนจาก TextBox ที่ 1 กับ 2 แสดงใน TextBox ที่ 3 ต้องทำยังไงหลอครับ ขอความช่วยเหลือหน่อยครับ ขอขอบคุณล่วงนห้าครับ
jamelove เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปัน1 ครั้ง - ดาว 50 ดวง - โหวตเพิ่มดาว






Gaiden
(โสฬส นิเวศสุนทร)

ผู้ชมข้อมูลนี้แล้ว 5,235 ครั้ง
เป็นสมาชิก: นานกว่า 3 ปี
แบ่งปันความรู้ 28 ครั้ง
ได้รับดาว 111 ดวง

โหวตเพิ่มดาว

Blog อื่น ๆ ของผู้เขียน