แสดงบทความที่มีป้ายกำกับ C# แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ C# แสดงบทความทั้งหมด

วันศุกร์ที่ ๒๐ มิถุนายน พ.ศ. ๒๕๕๑

Image Processing ด้วย C# 1

ในบทแรกนี้เราจะทำการเปิดไฟล์ภาพแล้วแสดงผล
เป้าหมาย



ขั้นตอน
สมมติว่าเราสร้างเมนูเรียบร้อยแล้ว

1. ประกาศตัวแปรสำหรับเก็บภาพ เป็นตัวแปรคลาส
private Bitmap bmp;

2. ในส่วนของเมนู Open ให้เพิ่มรหัสโปรแกรมดังนี้
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
//Call open dialog
OpenFileDialog openFileDialog = new OpenFileDialog();
// Default Initial directory
openFileDialog.InitialDirectory = "c:\\";
// File type filter
openFileDialog.Filter = "Bitmap files (*.bmp)|*.bmp|Jpeg files (*.jpg)|*.jpg|PNG files (*.png)|*.png|All valid files (*.bmp/*.jpg/*.png)|*.bmp/*.jpg/*.png";
// Set png to be a default format
openFileDialog.FilterIndex = 3;
openFileDialog.RestoreDirectory = true;

// if click OK to open image
if (DialogResult.OK == openFileDialog.ShowDialog())
{
// Load bitmap from file
bmp = (Bitmap)Bitmap.FromFile(openFileDialog.FileName, false);
// set width and height of form, compensate for menubar
this.Width = bmp.Width + 5;
this.Height = bmp.Height + 55;
// invoke paint method
this.Invalidate();
}
}

3. เพิ่ม Event ชื่อ Paint ให้กับฟอร์ม
แล้วเพิ่มรหัสโปรแกรมดังนี้

private void Form1_Paint(object sender, PaintEventArgs e)
{
// if image file does not exist
if (bmp == null)
return;

// else draw image to form
Graphics g = e.Graphics;
Rectangle r = new Rectangle(0, 25, bmp.Width, bmp.Height);
g.DrawImage(bmp, r);
}


เรียบร้อยแล้วครับ

วันพฤหัสบดีที่ ๑๒ มิถุนายน พ.ศ. ๒๕๕๑

จัดการกับ radioButton หลายๆอัน

ถ้าใช้ radioButton หลายๆอันในฟอร์ม

เบื่อไหมครับที่จะต้องเขียนโค้ด เช่น
if(radioButton1.Checked)
.....
else if(radioButton2.Checked)

.....

ลองใช้วิธีนี้ไหมครับ
ให้คลิกที่ radioButton อันแรก จากนั้นกดแป้น Ctrl ค้างไว้แล้วคลิก radioButton ที่เหลือ
จากนั้นก็เลือก Event ชื่อ CheckedChanged แล้วพิมพ์ชื่อ radioChange แล้วกดแป้น Enter

ที่เหลือก็แก้ไขรหัสโปรแกรมดังนี้ครับ

string sradio;

public Form1()
{
InitializeComponent();
}

private void radioChange(object sender, EventArgs e)
{
//cast sender object to radiobutton
RadioButton radioFood = (RadioButton)sender;
if (radioFood.Checked)
sradio = radioFood.Text;

}

private void bttOK_Click(object sender, EventArgs e)
{
MessageBox.Show("คุณเลือก "+sradio,"รายการที่คุณเลือก",MessageBoxButtons.OK, MessageBoxIcon.Information);
}

ตรวจสอบการป้อนข้อมูลด้วย Validation (2)

ในตัวอย่างที่แล้ว http://surapongu.blogspot.com/2008/06/validation.html
เราได้ตรวจสอบการป้อนข้อมูล แล้วแสดงผลเตือนด้วย MessageBox

ยังมีคอนโทรลอีกตัวหนึ่งที่สามารถใช้ได้ในกรณีนี้ คือ


ทดลองเปิดโปรเจคเดิม แล้วดับเบิลคลิกที่คอนโทรลตัวนี้ มันจะไม่แสดงผลออกมาบนฟอร์มโดยตรง แต่ปรากฎอยู่ข้างใต้แทน

จากนั้นให้แก้โค้ดในบรรทัดที่แสดงผลข้อผิดพลาด จาก
MessageBox.Show("กรุณาป้อนตัวเลขเท่านั้น");

เป็น
errorProvider1.SetError(txtInput, "กรุณาป้อนตัวเลขเท่านั้น");

โดยที่ errorProvider1 เป็นชื่อของคอนโทรล errorProvider

ผลลัพธ์ที่ได้ เมื่อป้อนข้อมูลผิดพลาด จะเกิดปุ่มสีแดงกะพริบเตือนข้างๆ textBox

เลือกใช้ตามใจชอบครับ

ตรวจสอบการป้อนข้อมูลด้วย Validation

เราสามารถตรวจสอบข้อมูลที่ป้อนเข้าไปใน textBox ได้โดยใช้ event ที่ชื่อว่า validating
ตัวอย่าง

โปรแกรมนี้จะตรวจสอบการป้อนค่าตัวเลข ซึ่ง ค่าที่ป้อนจะต้อง
  • เป็นตัวเลขจำนวนเต็มเท่านั้น
  • ต้องมีค่าตั้งแต่ 1-10 เท่านั้น
ถ้าป้อนไม่ถูกจะแสดงผลดังนี้

แต่ถ้าป้อนถูกตามเงื่อนไข ก็จะแสดงผล


รหัสโปรแกรมก็จะเป็นดังนี้

int num;
public Form1()
{
InitializeComponent();
}

private void txtInput_Validating(object sender, CancelEventArgs e)
{
//validate input
//if integer
if (int.TryParse(txtInput.Text, out num))
{
if (num<1>10)
{
e.Cancel = true; //ยกเลิกทุกเหตุการณ์ถ้าไม่ผ่าน validation เช่นไม่สามารถปิดฟอร์มได้
MessageBox.Show("กรุณาป้อนเลข 1-10");
}
}
else
{
e.Cancel = true;
MessageBox.Show("กรุณาป้อนตัวเลขเท่านั้น");
}
}

private void bttOK_Click(object sender, EventArgs e)
{
MessageBox.Show("คุณป้อนเลข " + num);
}
}

ไม่ยากใช่ไหมครับ สำหรับการ validate ข้อมูล

วันอังคารที่ ๑๐ มิถุนายน พ.ศ. ๒๕๕๑

Visual C# GUI 3

ทดลองเล่น radioButton กับ checkBox กันครับ

เป้าหมาย


อันนี้ง่ายๆ ครับ ใช้คุณสมบัติ Checked

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
radioDT.Checked = true;
radioPC.Checked = true;
cbMouse.Checked = true;
}

private void bttOK_Click(object sender, EventArgs e)
{
string choice = "คุณเลือก ";
if (radioDT.Checked)
choice += radioDT.Text;
else if (radioNB.Checked)
choice += radioNB.Text;
choice += Environment.NewLine + "ประเภท ";
if (radioPC.Checked)
choice += radioPC.Text;
else if(radioMAC.Checked)
choice += radioMAC.Text;
choice += Environment.NewLine + "และของแถม ";
if (cbMouse.Checked)
choice += cbMouse.Text + " ";
if (cbFlash.Checked)
choice += cbFlash.Text;

txtResult.Text = choice;
}
}

เรียบร้อยครับ

Visual C# GUI 2

วันนี้เราจะทดลองเล่นกับ ComboBox กันนะครับ

เป้าหมาย

เมื่อคลิกปุ่ม ตกลง จะได้


กำหนดให้ comboBox ของอาหารคาว ชื่อ cmbFood และ อาหารหวาน ชื่อ cmbDessert และ ปุ่มตกลงชื่อ bttOK

สำหรับ cmbFood เราจะเพิ่มรายการอาหารจากเมนู Properties โดยเลือกหัวข้อ Items


เมื่อคลิก จะเกิดช่องให้เติมรายการ


ส่วน cmbDessert เราจะเขียนรหัสโปรแกรมเพื่อเพิ่มรายการทีหลัง

จากนั้นดับเบิลคลิกปุ่มตกลง แล้วเพิ่มรหัสดังนี้

ส่วนแรกเป็นส่วนที่ทำงานเมื่อเรียกฟอร์มขึ้นมา
public Form1()
{
InitializeComponent();
string[] dessert = {"รวมมิตร", "บัวลอย", "กล้วยบวดชี"};
cmbDessert.Items.AddRange(dessert); //เพิ่มรายการของหวานให้คอมโบ
cmbFood.SelectedIndex = 0; //เลือกรายการแรก
cmbDessert.SelectedIndex = 0; //เลือกรายการแรก
}

ส่วนของปุ่มตกลง
private void bttOK_Click(object sender, EventArgs e)
{
MessageBox.Show("คุณเลือก "+cmbFood.Text+" และ "+cmbDessert.Text,"รายการอาหาร",MessageBoxButtons.OK,MessageBoxIcon.Information);
}

จะสังเกตว่าเราใช้คุณสมบัติ Text ของคอมโบได้โดยตรง นอกจากนี้แล้ว เรายังสามารถรู้ได้ว่าเลือกรายการอันดับที่เท่าไร โดยดูจากคุณสมบัติ SelectedIndex

วันนี้ก็ขอจบคร่าวๆแค่นี้ครับ

Visual C# GUI 1

เรามาสร้าง user interface เบื้องต้นกับ Visual C# 2005 กันครับ

วันนี้เราจะสร้างโปรแกรมรับข้อความจากผู้ใช้แล้วแสดงผลอย่างง่ายๆ ดังนี้


เมื่อป้อนข้อความแล้วคลิกปุ่มตกลง จะได้


แต่ถ้าไม่ป้อนข้อความใดแล้วคลิกปุ่มตกลง จะแสดงข้อความเตือน


และสามารถลบข้อความที่กำลังป้อน พร้อมปุ่มจบการทำงาน

เริ่มต้นด้วย
เลือก Windows Application

จากนั้นออกแบบโปรแกรมให้มีลักษณะดังนี้


โดยกำหนดชื่อแต่ละคอนโทรลดังนี้
กล่องข้อความ ชื่อ txtInput
ปุ่มตกลง ชื่อ bttOK
ปุ่มลบ ชื่อ bttClear
ปุ่มจบการทำงาน ชื่อ bttExit

จากนั้นดับเบิลคลิกที่ปุ่ม ตกลง แล้วเพิ่มรหัสโปรแกรมดังนี้
private void bttOK_Click(object sender, EventArgs e)
{
string stext = txtInput.Text.Trim();
if (stext.Length != 0)
MessageBox.Show("คุณป้อนข้อความว่า " + stext, "ข้อความของคุณ", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show("คุณไม่ได้ป้อนข้อความใดๆ","ผิดพลาด",MessageBoxButtons.OK,MessageBoxIcon.Error);
}

สำหรับปุ่ม ลบ
private void bttClear_Click(object sender, EventArgs e)
{
txtInput.Clear(); // จะใช้ txtInput.Text = "" ก็ได้
txtInput.Focus();
}

สำหรับปุ่ม จบการทำงาน
private void bttExit_Click(object sender, EventArgs e)
{
Application.Exit();
}

จากนั้นทดลองกดเมนู Debug / Start without Debugging เื่พื่อดูผลลัพธ์
เสร็จแล้วครับ