TextBox เป็นคอนโทรลที่ให้ผู้ใช้โปรแกรมสามารถป้อนข้อความได้(โดยการพิมพ์) ข้อความที่ทำการพิมพ์เข้าไปโปรแกรมนำไปใช้งานในตัวโปรแกรมตามที่ผู้เขียนออกแบบใช้งาน และในบางครั้งการป้อนเข้าไปต้องการรับเฉพาะตัวเลขเท่านั้นเพื่อนำไปคำนวณต่าง ๆ ตามที่ออกแบบไว้ หากผู้ใช้งานพิมพ์อักขระอื่นที่ไม่ใช่ตัวเลขทำให้การคำนวณผิดพลาดได้ การเรียนรู้ครั้งนี้เป็นวิธีการที่ทำให้ TextBox รับเฉพาะตัวเลขเท่านั้น ขั้นตอนดังนี้
1. วางคอนโทรล TextBox ลงใน Form โปรแกรมดังรูป
(http://www.praphas.com/PhotoForum/interface/HowTo4/1.png)
2. เลือกเหตุการณ์กระตุ้นคอนโทรล TextBox ให้เป็น KeyPress ดำเนินการดังนี้
- คลิกที่คอนโทรล TextBox
- คลิกไอคอนสายฟ้าในกล่อง Properties
- ดับเบิลคลิกที่คำว่า KeyPress
(http://www.praphas.com/PhotoForum/interface/HowTo4/2.png)
3. ใส่โค้ดให้รับเฉพาะตัวเลขในคอนโทรล TextBox ที่เหตุการณ์กระตุ้น KeyPress
(http://www.praphas.com/PhotoForum/interface/HowTo4/3.png)
โค้ดใน TextBox (คัดลอกไปวางได้เลย)
// Verify that the pressed key isn't CTRL or any non-numeric digit
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
{
e.Handled = true;
}
// If you want, you can allow decimal (float) numbers
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
4. รันโปรแกรมแล้วทดลองป้อนข้อมูลลงในกล่อง TextBox ทั้งที่เป็นตัวเลขและอักขระอื่น ๆ สังเกตุผล
(http://www.praphas.com/PhotoForum/interface/HowTo4/4.png)
กรณีที่ให้รับตัวเลขจำนวนเต็มเท่านั้น (ไม่ให้ใส่ทศนิยม)
ตัวอย่างเช่น รับข้อมูลตัวเลขจากการพิมพ์ลงใน TextBox ระหว่าง 1-999
(http://www.praphas.com/PhotoForum/interface/HowTo4/5.png)
โค้ดรับได้เฉพาะตัวเลขเขียนลงใน Event textBox1_KeyPress
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
โค้ดตรวจสอบค่าใน textBox ไม่ให้เกินกำหนดใช้ Event textBox1_TextChanged
if (textBox1.Text != "" && Int16.Parse(textBox1.Text) > 1000)
{
textBox1.Text = textBox1.Text.Substring(0, textBox1.TextLength - 1);
MessageBox.Show("ใส่ตัวเลขระหว่าง 1-999 เท่านั้น", "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else if (textBox1.Text == "")
label1.Text = "ใส่ตัวเลขระหว่าง 1-999";
else
{
label1.Text = textBox1.Text + " x 2 = " + Int16.Parse(textBox1.Text)*2 ;
}