ผู้เขียน หัวข้อ: เรียนรู้ครั้งที่ 4 [การเขียนโค้ดให้ TextBox รับเฉพาะตัวเลขเท่านั้น]  (อ่าน 9151 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์
TextBox เป็นคอนโทรลที่ให้ผู้ใช้โปรแกรมสามารถป้อนข้อความได้(โดยการพิมพ์) ข้อความที่ทำการพิมพ์เข้าไปโปรแกรมนำไปใช้งานในตัวโปรแกรมตามที่ผู้เขียนออกแบบใช้งาน และในบางครั้งการป้อนเข้าไปต้องการรับเฉพาะตัวเลขเท่านั้นเพื่อนำไปคำนวณต่าง ๆ ตามที่ออกแบบไว้ หากผู้ใช้งานพิมพ์อักขระอื่นที่ไม่ใช่ตัวเลขทำให้การคำนวณผิดพลาดได้ การเรียนรู้ครั้งนี้เป็นวิธีการที่ทำให้ TextBox รับเฉพาะตัวเลขเท่านั้น ขั้นตอนดังนี้

1. วางคอนโทรล TextBox ลงใน Form โปรแกรมดังรูป


2. เลือกเหตุการณ์กระตุ้นคอนโทรล TextBox ให้เป็น KeyPress ดำเนินการดังนี้
   - คลิกที่คอนโทรล TextBox
   - คลิกไอคอนสายฟ้าในกล่อง Properties
   - ดับเบิลคลิกที่คำว่า KeyPress


3. ใส่โค้ดให้รับเฉพาะตัวเลขในคอนโทรล TextBox ที่เหตุการณ์กระตุ้น KeyPress

โค้ดใน TextBox (คัดลอกไปวางได้เลย)

โค๊ด: [Select]
            // 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 ทั้งที่เป็นตัวเลขและอักขระอื่น ๆ สังเกตุผล


กรณีที่ให้รับตัวเลขจำนวนเต็มเท่านั้น (ไม่ให้ใส่ทศนิยม)
ตัวอย่างเช่น รับข้อมูลตัวเลขจากการพิมพ์ลงใน TextBox ระหว่าง 1-999

โค้ดรับได้เฉพาะตัวเลขเขียนลงใน Event textBox1_KeyPress
โค๊ด: [Select]
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
โค้ดตรวจสอบค่าใน textBox ไม่ให้เกินกำหนดใช้ Event textBox1_TextChanged
โค๊ด: [Select]
            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 ;
            }
« แก้ไขครั้งสุดท้าย: ตุลาคม 29, 2018, 12:56:40 PM โดย admin »

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์