chuong 2 windows form (2)
TRANSCRIPT
Lập trình trên môi trường Windows
Chương 2: Windows form
Phần 1. Windows form 1
Bài tập 1
Yêu cầu
Viết chương trình windows form nhập vào tên người dùng và xuất ra messagebox câu chào tên
người đó. Khi bấm nút thoát sẽ xuất hiện thông báo hỏi xem “Bạn có muốn thoát không?”.
Hướng dẫn
Bước 1: tạo dự án windows form
Mở phần mềm Visual Studio
Vào menu File – New – Project…
Tại màn hình New Project, chọn ngôn ngữ là C#, loại ứng dụng là Windows Application,
tên dự án là Baitap1
Bước 2: thiết kế giao diện
Kéo thả các control theo giao diện yêu cầu, đặt tên cho các control
Textbox nhập tên là “txtTen”
Button Xin chào là “btnXinChao”
Button Thoát là “btnThoat”
Bước 3: viết code xử lý các button
Xử lý button Xin chào: nhấp đúp (double click) vào button Xin chào
private void btnXinChao_Click(object sender, EventArgs e)
{
MessageBox.Show("Xin chao " + txtTen.Text, "Bai tap 1");
}
Xử lý button Thoát: nhấp đúp (double click) vào button Thoát
private void btnThoat_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("Ban co muon thoat?", "Bai
tap 1", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
this.Close();
}
}
Bài tập 2
Yêu cầu
Viết chương trình nhập vào 2 số nguyên, xuất ra tổng của 2 số.
Hướng dẫn
Bước 1: tạo dự án Windows Application, đặt tên dự án là Baitap2
Bước 2: thiết kế giao diện
Kéo thả controls theo yêu cầu, đặt tên cho các controls
Textbox số thứ 1 là “txtSo1”
Textbox số thứ 2 là “txtSo2”
Button tính tổng là “btnTong”
Textbox kết quả là “txtKetQua”
Bước 3: viết code xử lý sự kiện click của button tổng
private void btnTong_Click(object sender, EventArgs e)
{
int so1 = int.Parse(txtSo1.Text);
int so2 = int.Parse(txtSo2.Text);
int tong = so1 + so2;
txtKetQua.Text = tong.ToString();
}
Bài tập 3
Yêu cầu
Viết chương trình nhập vào 2 số nguyên và phép toán (+,-,*,/ ) và xuất ra kết quả của phép toán.
Sử dụng combobox để chọn phép toán.
Hướng dẫn
Bước 1: thiết kế giao diện, đặt tên combobox phép toán là cbxPhepToan
Bước 2: thêm danh sách các phép toán vào combobox trong sự kiện Load của form
private void Form1_Load(object sender, EventArgs e)
{
cbxPhepToan.Items.Add("+");
cbxPhepToan.Items.Add("-");
cbxPhepToan.Items.Add("*");
cbxPhepToan.Items.Add("/");
}
Bước 3: viết code xử lý sự kiện click của button Tính
private void btnTinh_Click(object sender, EventArgs e)
{
int so1 = int.Parse(txtSo1.Text);
int so2 = int.Parse(txtSo2.Text);
int ketqua = 0;
switch (cbxPhepToan.SelectedIndex)
{
case 0:
ketqua = so1 + so2;
break;
case 1:
ketqua = so1 - so2;
break;
case 2:
ketqua = so1 * so2;
break;
case 3:
ketqua = so1 / so2;
break;
}
txtKetQua.Text = ketqua.ToString();
}
Bài tập 4
Yêu cầu
Viết chương trình nhập vào 2 số nguyên và phép toán (+,-,*,/ ) và xuất ra kết quả của phép toán.
Sử dụng radiobutton để chọn phép toán.
Hướng dẫn
Bước 1: đặt tên 4 radiobutton là rbCong, rbtTru, rbtNhan, rbtChia
Bước 2: viết code xử lý phép tính
if (rbtCong.Checked == true)
{
ketqua = so1 + so2;
}
else if (rbtTru.Checked == true)
{
ketqua = so1 - so2;
}
else if (rbtNhan.Checked == true)
{
ketqua = so1 * so2;
}
else if (rbtChia.Checked == true)
{
ketqua = so1 / so2;
}
Bài tập 5
Yêu cầu
Viết chương trình thêm, xóa, sửa, ghi file, đọc file một mảng số nguyên. Cấu trúc của tập tin ghi
là: dòng đầu tiên lưu số lượng phần tử mảng (n phần tử), n dòng tiếp theo mỗi dòng lưu một
phần tử.
Hướng dẫn
Bước 1: thiết kế giao diện, đặt tên listbox mảng là “”lbxMang”, textbox giá trị là “txtGiaTri”
Bước 1: khai báo mảng số nguyên trong form
namespace Baitap5
{
public partial class Form1 : Form
{
List<int> mang = new List<int>();
public Form1()
{
InitializeComponent();
}
// ...
Bước 2: viết hàm xử lý button Thêm
private void btnThem_Click(object sender, EventArgs e)
{
int so = int.Parse(txtGiaTri.Text);
// them vao trong mang
mang.Add(so);
// them vao trong listbox
lbxMang.Items.Add(so.ToString());
}
Bước 3: viết hàm xử lý button Xóa
private void btnXoa_Click(object sender, EventArgs e)
{
int chiso = lbxMang.SelectedIndex;
if (chiso > -1)
{
// xoa trong mang
mang.RemoveAt(chiso);
// xoa trong listbox
lbxMang.Items.RemoveAt(chiso);
}
else
{
MessageBox.Show("Ban chua chon phan tu can xoa", "Thong bao");
}
}
Bước 4: viết hàm xử lý button Cập nhật
private void btnCapNhat_Click(object sender, EventArgs e)
{
int chiso = lbxMang.SelectedIndex;
if (chiso > -1)
{
int so = int.Parse(txtGiaTri.Text);
// cap nhat trong mang
mang[chiso] = so;
// xoa trong listbox
lbxMang.Items[chiso] = so.ToString();
}
else
{
MessageBox.Show("Ban chua chon phan tu can cap nhat", "Thong
bao");
}
}
Bước 5: viết hàm xử lý button Ghi file
private void btnGhiFile_Click(object sender, EventArgs e)
{
// hien thi dialog ghi file
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "Ghi tap tin txt|*.txt";
if (dialog.ShowDialog() == DialogResult.OK)
{
// lay duong dan file can ghi
string duongdan = dialog.FileName;
// ghi mang xuong file
StreamWriter ghi = new StreamWriter(duongdan);
ghi.WriteLine(mang.Count.ToString());
for (int i = 0; i < mang.Count; i++)
{
ghi.WriteLine(mang[i]);
}
ghi.Close();
}
}
Bước 6: viết hàm xử lý button Đọc file
private void btnDocFile_Click(object sender, EventArgs e)
{
// xoa het cac phan tu dang co trong mang va listbox
mang.Clear();
lbxMang.Items.Clear();
// hien thi dialog doc file
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Doc tap tin txt|*.txt";
if (dialog.ShowDialog() == DialogResult.OK)
{
// lay duong dan file can doc
string duongdan = dialog.FileName;
// ghi mang xuong file
StreamReader doc = new StreamReader(duongdan);
int n = int.Parse(doc.ReadLine());
for (int i = 0; i < n; i++)
{
int so = int.Parse(doc.ReadLine());
mang.Add(so);
// them vao trong listbox
lbxMang.Items.Add(so.ToString());
}
doc.Close();
}
}
Bước 7: Viết hàm xử lý khi chọn một phần tử bên listbox sẽ hiển thị giá trị bên textbox giá trị.
Ta tạo sự kiện SelectedIndexChange của lbxMang
private void lbxMang_SelectedIndexChanged(object sender, EventArgs e)
{
int chiso = lbxMang.SelectedIndex;
if (chiso > -1)
{
txtGiaTri.Text = mang[chiso].ToString();
}
}
Phần 2. Windows form 2
Bài tập 6
Yêu cầu
Viết chương trình nhập vào 2 phân số và phép toán (+,-,*,/ ) và xuất ra kết quả của phép toán. Sử
dụng combobox để chọn phép toán.
Hướng dẫn
Bước 1: tạo lớp PhanSo, tham khảo lại bài hướng dẫn chương 1
Bước 2: thiết kế giao diện và xử lý
Bài tập 7
Yêu cầu
Viết chương trình My Notepad đơn giản
- Đọc file : hiển thị hộp thoại chọn file *.txt và hiển thị nội dung file lên textbox
txtNoiDung
- Ghi file : hiển thị hộp thoại ghi file *.txt và lưu nội dung trong textbox txtNoiDung vào
trong file
Hướng dẫn
Bước 1: thiết kế giao diện, textbox nội dung có thuộc tính Multiline=true
Bước 2: viết code button đọc file
private void btnDoc_Click(object sender, EventArgs e) { // tạo hộp thoại mở tập tin OpenFileDialog dlg = new OpenFileDialog(); // chỉ mở các tập tin .txt dlg.Filter = "Chon tap tin .txt|*.txt"; // hiển thị hộp thoại if (dlg.ShowDialog() == DialogResult.OK) { // lấy đường dẫn tập tin đã chọn string filePath = dlg.FileName; // mở tập tin để đọc StreamReader reader = new StreamReader(filePath); // đọc nội dung toàn bộ tập tin string noiDung = reader.ReadToEnd(); // đóng tập tin reader.Close(); // gán nội dung vào textbox txtNoiDung.Text = noiDung; }
}
Bước 2: viết code cho button ghi file
private void btnGhi_Click(object sender, EventArgs e) { // tạo hộp thoại lưu tập tin SaveFileDialog dlg = new SaveFileDialog(); // chỉ lưu tập tin dạng .txt dlg.Filter = "Luu tap tin .txt|*.txt"; // hiển thị hộp thoại if (dlg.ShowDialog() == DialogResult.OK) { // lấy đường dẫn tập tin sẽ lưu string filePath = dlg.FileName; // lấy nội dung từ textbox string noiDung = txtNoiDung.Text; // mở tập tin để lưu StreamWriter writer = new StreamWriter(filePath); // ghi toàn bộ nội dung vào tập tin writer.Write(noiDung); // đóng tập tin writer.Close(); } }
Bài tập 8
Yêu cầu :
Thêm phím tắt cho chương trình máy tính cho số nguyên
F1, F2, F3, F4 tương ứng với cộng, trừ, nhân, chia
Ctrl + X để thoát
Hướng dẫn :
Bước 1 : thay đổi thuộc tính KeyPreview của form bằng true
Cách 1 : phải chuột vào form, chọn Property, chọn thuộc tính KeyPreview bằng true
Cách 2 : trong sự kiện form load viết code : this.KeyPreview = true;
Bước 2 : viết hàm ThucHienPhepCong để khi nhấn vào button Cộng hoặc bấm phím tắt F1 sẽ
cùng gọi hàm này
private void ThucHienPhepCong() { int so1 = int.Parse(txtSo1.Text); int so2 = int.Parse(txtSo2.Text); int tong = so1 + so2; txtKetQua.Text = tong.ToString(); } private void btnCong_Click(object sender, EventArgs e) { ThucHienPhepCong(); }
Bước 3 : Viết sự kiện KeyUp của form
Phải chuột vào form chọn Property
Chọn biểu tượng sấm sét để chuyển qua danh sách sự kiện
DoubleClick vào sự kiện KeyUp để vào màn hình viết code
private void FormPhimTat_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.F1)
{ ThucHienPhepCong(); } else if (e.KeyCode == Keys.F2) { // ... } // bấm phím ctrl + X else if (e.KeyCode == Keys.X && e.Control == true) { // thoát khỏi chương trình this.Close(); } }
Bài tập 9
Yêu cầu
Viết chương trình load danh sách các ổ đĩa có trên hệ thống lên combobox, khi chọn một ổ đĩa sẽ
hiển thị các thông tin của ổ đĩa.
Hướng dẫn
Bước 1 : Khai báo mảng toàn cục các ổ đĩa arrDrive
// lấy mảng các ổ đĩa có trong hệ thống DriveInfo[] arrDrive = DriveInfo.GetDrives();
Bước 2 : Phát sinh sự kiện form_load của form
private void Form1_Load(object sender, EventArgs e) { foreach (DriveInfo drive in arrDrive) {
cbxDrives.Items.Add(drive.Name); } }
Bước 3 : Viết code cho sự kiện SelectedIndexChange của cbxDrives
private void cbxDrives_SelectedIndexChanged(object sender, EventArgs
e) { // lấy chỉ số trong combobox vừa chọn int index = cbxDrives.SelectedIndex; if (index != -1) { DriveInfo drive = arrDrive[index]; txtDriveName.Text = drive.VolumeLabel; txtRootDirectory.Text = drive.RootDirectory.FullName; txtTotalSize.Text = drive.TotalSize.ToString(); txtTotalFreeSpace.Text = drive.TotalFreeSpace.ToString(); } }
Phần 3. Windows form 3
Bài tập 10
Yêu cầu
Viết chương trình quản lý tập tin đơn giản :
Load danh sách các ổ đĩa có trên hệ thống vào trong comboBox, khi chọn các ổ đĩa trong
comboBox thì danh sách listView bên dưới thay đổi theo
DoubleClick hoặc bấm Enter vào 1 thư mục : mở thư mục đó
DoubleClick hoặc bấm Enter vào 1 tập tin : mở tập tin đó
Hướng dẫn
Bước 1 : Thiết kế giao diện
Gán thuộc tính cho listView lvwDir
Thuộc tính View = Detail : để xem danh sách theo dạng nhiều cột
Thuộv tính FullRowSelect = True : để chọn toàn bộ dòng
Thêm danh sách các cột
o Vào thuộc tính Column
o Bấm Add để thêm mới 1 cột
Thuộc tính Text = “Name” : cột đầu tiên có tiêu đề là Name
Thuộc tính TextAlign : chỉnh canh trái hoặc canh phải
o Tương tự với 3 cột còn lại
Thêm icon Thư mục và File cho listView
o Tạo một control ImageList bằng cách kéo control ImageList từ toolbox vào form
o Sau đó thêm 2 icon vào trong imagelist vừa kéo trong thuộc tính Images
o Trong thuộc tính SmallImageList của listiview sẽ chọn ImageList vừa kéo vào
Bước 2 : khai báo biến toàn cục “thư mục hiện tại”, “mảng các ổ đĩa” (tương ứng với combobox
ỗ đĩa), “mảng các phần tử” (tương ứng các item trong list view)
public partial class Form2 : Form { // thu muc hien tai DirectoryInfo curDir; // lấy mảng các ổ đĩa có trong hệ thống DriveInfo[] arrDrive = DriveInfo.GetDrives(); // ...
Bước 3 : Viết code thêm danh sách các ỗ đĩa trong combobox trong form load
private void Form2_Load(object sender, EventArgs e) { foreach (DriveInfo drive in arrDrive) { cbxDrives.Items.Add(drive.Name); } }
Bước 4 : Viết hàm OpenDirectory(DirectoryInfo dir) dùng để hiện thị danh sách tập tin và thư
mục trong thư mục dir
private void OpenDirectory(DirectoryInfo dir) { lvwDir.Items.Clear(); arrItem.Clear(); // duyệt lần lược các thư mục con có trong dir foreach (DirectoryInfo subDir in dir.GetDirectories()) { // tạo mới 1 hàng trong listView ListViewItem lvi = new ListViewItem(); // điền thông tin cho cột 1 "Name" lvi.Text = subDir.Name; // điền thông tin cho cột 2 "Size" lvi.SubItems.Add(""); // điền thông tin cho cột 3 "Type" lvi.SubItems.Add("Folder"); // điền thông tin cho cột 4 "Date modified" lvi.SubItems.Add(subDir.LastWriteTime.ToString()); // chỉ số của icon hiển thị lvi.ImageIndex = 0;
// gán đối tượng thư mục cho thuộc tính tag lvi.Tag = subDir;
// thêm hàng mới tạo vào trong listView lvwDir.Items.Add(lvi); } // duyệt lần lược các tập tin có trong dir foreach (FileInfo file in dir.GetFiles()) { // tạo mới 1 hàng trong listView ListViewItem lvi = new ListViewItem(); lvi.Text = file.Name; lvi.SubItems.Add(file.Length.ToString()); lvi.SubItems.Add("File"); lvi.SubItems.Add(file.LastWriteTime.ToString()); lvi.ImageIndex = 1; lvi.Tag = file;
lvwDir.Items.Add(lvi);
} }
Bước 5 : Viết code cho sự kiện selectedIndexChange của combobox ổ đĩa
private void cbxDrives_SelectedIndexChanged(object sender, EventArgs
e) { // lấy chỉ số trong combobox vừa chọn int index = cbxDrives.SelectedIndex; if (index != -1) { curDir = arrDrive[index].RootDirectory; OpenDirectory(curDir); } }
Bước 6 : Viết code cho sự kiện ItemActivate của listview (khi người dùng doubleclick hay bấm
enter vào 1 item)
private void lvwDir_ItemActivate(object sender, EventArgs e) { // kiểm tra phần từ vừa chọn có phải là thư mục if (lvwDir.SelectedItems[0].Tag.GetType() == typeof(DirectoryInfo)) { curDir = (DirectoryInfo)lvwDir.SelectedItems[0].Tag; OpenDirectory(curDir); }
else if(lvwDir.SelectedItems[0].Tag.GetType() == typeof(FileInfo)) { FileInfo file = (FileInfo)lvwDir.SelectedItems[0].Tag; System.Diagnostics.Process.Start(file.FullName); } }
Bài tập 11
Yêu cầu
Viết chương trình hiển thị nội dung tập tin dạng text. Nhập đường dẫn file, bấm view sẽ mở form
mới hiển thị nội dung
Hướng dẫn
Bước 1 : thêm form mới frmViewFile vào project
Vào menu Project → Add Windows Form
Name : đặt tên là frmViewFile
Form này chỉ có 1 control duy nhất là textbox txtNoiDung
o có thuộc tính Multiline = true để nhập nhiều dòng
o có thuộc tính Dock = Fill để control phủ toàn bộ form
Tạo thuộc tính NoiDung cho form này để truyền dữ liệu nội dung từ form chính lên form
này
public partial class frmViewFile : Form { private string _noiDung;
public string NoiDung { get { return _noiDung; } set { _noiDung = value; } }
Trong hàm form_load hiển thị NoiDung lên textbox
private void frmViewFile_Load(object sender, EventArgs e) { txtNoiDung.Text = _noiDung; }
Trong hàm form_closed lưu NoiDung từ textbox
private void frmViewFile_FormClosed(object sender, FormClosedEventArgs
e) { _noiDung = txtNoiDung.Text; }
Bước 2 : Viết code cho sự kiện click của button View
private void btnView_Click(object sender, EventArgs e) { // kiem tra duong dan file co ton tai if (File.Exists(txtFilePath.Text) == true) { // doc toan bo noi dung tu file StreamReader reader = new StreamReader(txtFilePath.Text); string noiDung = reader.ReadToEnd(); reader.Close(); // hien thi form view file frmViewFile form = new frmViewFile(); form.NoiDung = noiDung; form.ShowDialog(); // lay lai noi dung da cap nhat tren form view file
noiDung = form.NoiDung; } else { MessageBox.Show("Tap tin nay khong ton tai", "Thong bao"); } }
Bài tập 12
Yêu cầu
Viết chương trình copy, move, tạo mới file; folder
Hướng dẫn
Quản lý file
Copy file : truyền vào đường dẫn file nguồn và đường dẫn file đích
File.Copy("D:/temp1/test.txt", "D:/temp2/test.txt");
Move file : truyền vào đường dẫn file nguồn và đường dẫn file đích
File.Move("D:/temp1/test.txt", "D:/temp2/test.txt");
Delete file : truyền vào đường dẫn file cần xóa
File.Delete("D:/temp2/test.txt");
Quản lý folder
Tạo mới thư mục :
Directory.CreateDirectory("D:/temp1/new folder");
Move thư mục :
Directory.Move("D:/temp1", "D:/temp2/temp1");
Copy thư mục* : không hỗ trợ sẵn hàm phải viết hàm đệ qui để copy
Xóa thư mục
Directory.Delete("D:/temp2/temp1", true);