การเขียนโปรแกรมด้วย PocketC# ตอนที่ 3
สวัสดีครับเพื่อน ๆ ทุกท่าน ในตอนที่ 2 เราได้ทดลองสร้าง Form เปล่า ๆ ไปแล้ว ตอนนี้เราลองมาดูการรับข้อมูลเข้าไปทำงานในฟอร์ม ว่ามีวิธีการอย่างไร โดยทั่วไปแล้ว การรับข้อมูลของ PocketPC จะรับเข้าผ่านช่องทางหลัก ๆ อยู่สองช่องทาง คือ ผ่านทาง Keyboard และผ่านทาง Touch Screen
เมื่อเราสร้างฟอร์มแล้ว และต้องการรับข้อมูลจาก Keyboard หรือทาง Touch Screen เราก็ต้องใช้ method หรือคำสั่งเพิ่มเติมดังนี้
การรับข้อมูลจาก Keyboard
protected override void OnKeyDown(KeyEventArgs keyArgs)
{
//คำสั่งที่ต้องการให้ทำงานเมื่อกด key;
}
การรับข้อมูลจาก Touch Screen
protected override void OnMouseDown(MouseEventArgs mouseArgs)
{
//คำสั่งที่ต้องการให้ทำงานเมื่อแตะหน้าจอ;
}
ขอให้เพื่อน ๆ ลองเพิ่มคำสั่งตามนี้ ต่อท้าย method iami() ครับ
protected override void OnKeyDown(KeyEventArgs keyArgs)
{
MessageBox.Show(Key Pressed,Keys);
}
protected override void OnMouseDown(MouseEventArgs mouseArgs)
{
MessageBox.Show(Screen Touch,Screen);
}
จากนั้นลอง Build และ Run ดู โดยลองกดปุ่มทิศทาง หรือใช้ปากกาแตะหน้าจอดูครับ จะเห็นได้ว่าฟอร์มจะตอบสนองต่อการกดปุ่มหรือแตะด้วยการแสดงข้อความเป็น MessageBox ขึ้นมา
สำหรับ MessageBox นี้จะมีองค์ประกอบสำคัญอยู่สองส่วนคือส่วนข้อความใน Box และส่วนหัวเรื่องของ Box ข้อความในเครื่องหมายคำพูดอันแรก จะเป็นข้อความใน Box ส่วนข้อความในเครื่องหมายคำพูดอันที่สองจะเป็นหัวเรื่องของ Box ครับ
เพื่อความชัดเจนว่า ฟอร์มของเรารับข้อมูลจากการแตะหน้าจอจริง ๆ ไม่ได้โม้ ขอให้เพื่อน ๆ เพิ่มคำสั่งใน MessageBox ของ method OnMouseDown ดังนี้ครับ
protected override void OnMouseDown(MouseEventArgs mouseArgs)
{
MessageBox.Show(Screen Touch=+mouseArgs.X+:+mouseArgs.Y,Screen);
}
จากนั้น Build และ Run แล้วใช้ปากกาจิ้มหน้าจอดูที่ตำแหน่งต่าง ๆ จะเห็นข้อความแสดงถึงตำแหน่งในแนวแกน X และ Y ของจุดที่ปากกาจิ้มลงไปที่หน้าจอครับ เพราะเราได้เขียนคำสั่งให้ดึงตำแหน่งของการจิ้ม จาก mouseArgs มาแสดงใน MessageBox ของเราด้วย ซึ่งปกติหน้าจอของ PocketPc จะมีขนาดกว้างในแนวแกน X เท่ากับ 240 จุด ขนาดความสูงในแนวแกน Y เท่ากับ 320 จุด แต่จากการจิ้มดูในฟอร์มของเรา ความสูงจะมีไม่เกิน 295 จุด เพราะต้องเสียพื้นที่ให้กับแถบหัวของฟอร์มไปประมาณ 25 จุด นั่นเอง สำหรับจอ VGA ปกติจะมีขนาด 480x640 จุด แต่ผมไม่มีเครื่องทดสอบ ก็ต้องรบกวนเพื่อน ๆ ที่ใช้จอ VGA ทดลองจิ้มดูนะครับ
ครับ ก็เป็นแนวทางการเขียนคำสั่งเพื่อควบคุมการทำงานของฟอร์มเปล่า ๆ ของเรานะครับ ผมก็ใช้เทคนิคนี้อีกนั่นแหละ ที่ใช้ควบคุมโปรแกรมไฟฉุกเฉินให้มันเปลี่ยนสีหน้าจอเมื่อแตะหน้าจอแต่ละครั้งครับ และใช้เทคนิคการนำค่า X,Y ที่ได้จากหน้าจอตำแหน่งต่าง ๆ ไปใช้ในเกมจับผิดสารพัดสัตว์ด้วยครับ ง่ายไหมครับ
การควบุคมฟอร์มด้วย controls
จากที่กล่าวมาตอนแรกว่า เมื่อสร้างฟอร์มเปล่า ๆ แล้ว ต่อไปเราก็ต้องออกแบบการแสดงผลบนหน้าจอ ปุ่มกด กล่องข้อความต่าง ๆ เพื่อใช้โต้ตอบกับผู้ใช้ ดังนั้นเราต้องเพิ่มคำสั่งเกี่ยวกับ controls ต่าง ๆ ลงใน method iami() ของเรา ให้มีส่วนต่าง ๆ เป็นโครงสร้างดังนี้
iami()
{
// Form header หรือส่วนหัวของฟอร์ม เช่น Text=ฉันเป็นฉันเอง
หรือ BackColor=Color.Red ที่เราได้เขียนไปแล้ว//Controls Declaration การประกาศว่าจะใช้ controls อะไรบ้าง
//Controls Properties การกำหนดคุณสมบัติของ controls
//Add all Controls สั่งให้แสดง controls บนหน้าจอฟอร์ม
//Add Control Events รับคำสั่งจากผู้ใช้ที่ป้อนให้แก่ controls เพื่อปฏิบัติ
}
คราวนี้เรามาลองเขียนการสร้าง controls กันเลยครับ เพื่อไม่ให้สับสน จึงขอให้เพื่อน ๆ ลบ method คำสั่งเกี่ยวกับการรับข้อมูลจาก KeyBoard และ TouchScreen ที่เขียนไว้แล้ว ออกทั้งหมดก่อนครับ คงเหลือไว้แต่ method iami() แบบเดิม แล้วเพิ่มคำสั่งเข้าไปใน iami() ตามนี้ครับ
using System;
using System.Windows.Forms;
using System.Drawing;
namespace testform
{
class iami : Form
{
static void Main()
{
Application.Run(new iami());
}
iami()
{
//Form header
MinimizeBox=false;
Text=ฉันเป็นฉันเอง
;BackColor=Color.Red;
//controls declaration
Button button1=new Button();
TextBox textBox1=new TextBox();
Label lbl1=new Label();
//button properties
button1.Location=new Point(90,100);
button1.Size=new Size(60,20);
button1.Text=ออก
;//textBox properties
textBox1.Text=ฉันเป็นฉัน
;textBox1.Size=new Size(220,40);
textBox1.Location=new Point(10,50);
//label properties
lbl1.Text=ฉันเป็นฉัน
;lbl1.Location=new Point(10,10);
lbl1.Size=new Size(220,20);
lbl1.BackColor=Color.Blue;
//Add all controls
Controls.Add(button1);
Controls.Add(textBox1);
Controls.Add(lbl1);
//Add control Events
}
}
}
เวลาเขียนคำสั่งลงใน PocketC# ให้ระวังตัวอักษรใหญ่เล็กให้ดี อย่าลืม จุด กับเครื่องหมาย ; และพิมพ์คำสั่ง lbl1 ให้ดีครับ ต้องพิมพ์ว่า แอลบีแอลหนึ่ง นะครับ เพราะตัวอักษรแอลกับเลขหนึ่ง มันเหมือนกันเป๊ะ ถ้าพิมพ์ผิดจะ compileไม่ผ่านนะเออ
จากชุดคำสั่งข้างต้น เราจะสร้าง controls 3 ตัว คือ Button , TextBox และ Label โดยกำหนดขนาดด้วย Size และกำหนดตำแหน่งด้วย Location ซึ่งอ้างอิงจากตำแหน่ง X,Y บนหน้าจอนั่นเอง นอกจากนี้ยังกำหนดข้อความที่จะแสดงบนปุ่ม หรือกล่องข้อความด้วยคำสั่ง Text และใน Control Label นั้นสามารถกำหนดสีพื้นหลังของข้อความได้ด้วยคำสั่ง BackColor แบบเดียวกับฟอร์ม ต่อมาก็เป็นส่วนการ Add controls เพื่อให้แสดง controls ทั้งสามบนหน้าจอ ส่วนการควบคุม controls ในส่วนสุดท้ายเรายังไม่ได้ใส่คำสั่งเอาไว้ คงมีแต่หัวข้อคือ //Add control Events
จากนั้นลอง Build และ Run ดูครับ จะเห็นฟอร์มสีแดงแป๊ด ปุ่มกด และกล่องข้อความ รวมถึงข้อความมีพื้นหลังสีน้ำเงิน หากเราลองเอาปากกาจิ้มปุ่ม
ออก ก็จะเห็นมันกะพริบแวบ แวบ แต่ไม่เกิดอะไรขึ้น เพราะเรายังไม่ได้ใส่คำสั่งให้มันทำอะไร ในหัวข้อ //Add control Events นั่นเองช่วงนี้ก็ให้เพื่อน ๆลองเปลี่ยนค่า Size, Location หรือข้อความใน Text ของ Controls ต่าง ๆ ตามต้องการ ระหว่างรอผมเขียนตอนที่ 4 ต่อไปครับ
ขอให้สนุกครับ
[email protected]5 สิงหาคม 2550