Winform là công cụ vô cùng mạnh mẽ để phát triển các ứng dụng giao diện người dùng (GUI) cho các ứng dụng Windows. Để thành thạo Winform, việc luyện tập qua các bài tập là điều vô cùng cần thiết. Bài viết này sẽ giới thiệu một số bài tập lớp Winform C# có lời giải chi tiết, giúp bạn củng cố kiến thức và nâng cao kỹ năng lập trình Winform.
Bài tập 1: Tạo ứng dụng tính diện tích hình chữ nhật
Mục tiêu: Nắm vững cách sử dụng các control cơ bản như TextBox, Label, Button, cách xử lý sự kiện Click, cách tính toán và hiển thị kết quả.
Yêu cầu:
-
Tạo một form Winform với các control sau:
- Hai TextBox để nhập chiều dài và chiều rộng.
- Một Button có label là “Tính diện tích”.
- Một Label để hiển thị kết quả tính toán.
-
Khi người dùng nhập chiều dài và chiều rộng, sau đó nhấn vào Button “Tính diện tích”, ứng dụng sẽ hiển thị diện tích của hình chữ nhật vào Label.
Lời giải:
using System;
using System.Windows.Forms;
namespace BaiTapWinform
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnTinhDienTich_Click(object sender, EventArgs e)
{
// Lấy giá trị chiều dài và chiều rộng từ TextBox
double chieuDai = double.Parse(txtChieuDai.Text);
double chieuRong = double.Parse(txtChieuRong.Text);
// Tính diện tích
double dienTich = chieuDai * chieuRong;
// Hiển thị kết quả
lblDienTich.Text = $"Diện tích: {dienTich}";
}
}
}
Lưu ý:
- Code trên sử dụng hàm
double.Parse()
để chuyển đổi chuỗi từ TextBox thành số thực. - Nên kiểm tra xem người dùng có nhập đúng định dạng số hay không để tránh lỗi trong quá trình xử lý.
Bài tập 2: Tạo ứng dụng đơn giản quản lý danh sách sinh viên
Mục tiêu: Nắm vững cách sử dụng ListBox, ComboBox, Button, cách thêm, xóa, sửa dữ liệu, cách hiển thị dữ liệu.
Yêu cầu:
-
Tạo một form Winform với các control sau:
- ListBox để hiển thị danh sách sinh viên.
- TextBox để nhập thông tin sinh viên (Tên, Lớp, Điểm).
- Button “Thêm”, “Xóa”, “Sửa”.
- ComboBox để lựa chọn loại danh sách (Tên, Lớp, Điểm).
-
Chức năng của ứng dụng:
- Thêm: Cho phép người dùng nhập thông tin sinh viên mới và thêm vào ListBox.
- Xóa: Cho phép người dùng chọn một sinh viên trong ListBox và xóa khỏi danh sách.
- Sửa: Cho phép người dùng chọn một sinh viên trong ListBox, sửa thông tin và cập nhật lại danh sách.
- Hiển thị: Cho phép người dùng lựa chọn loại danh sách (Tên, Lớp, Điểm) để hiển thị trong ListBox.
Lời giải:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BaiTapWinform
{
public partial class Form1 : Form
{
private List<SinhVien> danhSachSinhVien;
public Form1()
{
InitializeComponent();
danhSachSinhVien = new List<SinhVien>();
}
private void btnThem_Click(object sender, EventArgs e)
{
// Lấy thông tin từ TextBox
string ten = txtTen.Text;
string lop = txtLop.Text;
double diem = double.Parse(txtDiem.Text);
// Tạo đối tượng SinhVien mới và thêm vào danh sách
SinhVien sv = new SinhVien(ten, lop, diem);
danhSachSinhVien.Add(sv);
// Cập nhật ListBox
lstSinhVien.Items.Clear();
foreach (SinhVien sv1 in danhSachSinhVien)
{
lstSinhVien.Items.Add(sv1.ToString());
}
}
private void btnXoa_Click(object sender, EventArgs e)
{
// Xóa sinh viên được chọn trong ListBox
if (lstSinhVien.SelectedIndex != -1)
{
danhSachSinhVien.RemoveAt(lstSinhVien.SelectedIndex);
lstSinhVien.Items.RemoveAt(lstSinhVien.SelectedIndex);
}
}
private void btnSua_Click(object sender, EventArgs e)
{
// Lấy thông tin từ TextBox
string ten = txtTen.Text;
string lop = txtLop.Text;
double diem = double.Parse(txtDiem.Text);
// Sửa thông tin sinh viên được chọn
if (lstSinhVien.SelectedIndex != -1)
{
danhSachSinhVien[lstSinhVien.SelectedIndex] = new SinhVien(ten, lop, diem);
lstSinhVien.Items[lstSinhVien.SelectedIndex] = danhSachSinhVien[lstSinhVien.SelectedIndex].ToString();
}
}
private void cboHienThi_SelectedIndexChanged(object sender, EventArgs e)
{
// Hiển thị danh sách theo lựa chọn
lstSinhVien.Items.Clear();
switch (cboHienThi.SelectedItem.ToString())
{
case "Tên":
foreach (SinhVien sv in danhSachSinhVien)
{
lstSinhVien.Items.Add(sv.Ten);
}
break;
case "Lớp":
foreach (SinhVien sv in danhSachSinhVien)
{
lstSinhVien.Items.Add(sv.Lop);
}
break;
case "Điểm":
foreach (SinhVien sv in danhSachSinhVien)
{
lstSinhVien.Items.Add(sv.Diem);
}
break;
}
}
}
// Class đại diện cho sinh viên
public class SinhVien
{
public string Ten { get; set; }
public string Lop { get; set; }
public double Diem { get; set; }
public SinhVien(string ten, string lop, double diem)
{
this.Ten = ten;
this.Lop = lop;
this.Diem = diem;
}
public override string ToString()
{
return $"Tên: {Ten}, Lớp: {Lop}, Điểm: {Diem}";
}
}
}
Lưu ý:
- Code trên sử dụng class
SinhVien
để lưu trữ thông tin của mỗi sinh viên. - Chức năng sửa có thể được cải thiện bằng cách hiển thị thông tin của sinh viên được chọn vào các TextBox để người dùng sửa trực tiếp.
Bài tập 3: Tạo ứng dụng hiển thị thông tin thời tiết
Mục tiêu: Nắm vững cách sử dụng WebBrowser, cách truy vấn API, cách xử lý dữ liệu JSON.
Yêu cầu:
- Tạo một form Winform với một WebBrowser để hiển thị thông tin thời tiết.
- Người dùng có thể nhập tên thành phố vào một TextBox và nhấn vào Button “Kiểm tra” để hiển thị thông tin thời tiết.
Lời giải:
using System;
using System.Net.Http;
using System.Windows.Forms;
using Newtonsoft.Json;
namespace BaiTapWinform
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void btnKiemTra_Click(object sender, EventArgs e)
{
// Lấy tên thành phố từ TextBox
string thanhPho = txtThanhPho.Text;
// Truy vấn API OpenWeatherMap
string apiUrl = $"http://api.openweathermap.org/data/2.5/weather?q={thanhPho}&appid=YOUR_API_KEY";
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(apiUrl);
// Xử lý dữ liệu JSON
if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
WeatherData weatherData = JsonConvert.DeserializeObject<WeatherData>(json);
// Hiển thị thông tin thời tiết
webBrowser1.DocumentText = $"<h1>Thời tiết tại {weatherData.name}</h1>" +
$"<p>Nhiệt độ: {weatherData.main.temp} Kelvin</p>" +
$"<p>Mô tả: {weatherData.weather[0].description}</p>";
}
else
{
MessageBox.Show("Không tìm thấy thông tin thời tiết.");
}
}
}
// Class đại diện cho dữ liệu thời tiết
public class WeatherData
{
public string name { get; set; }
public Main main { get; set; }
public Weather[] weather { get; set; }
}
public class Main
{
public double temp { get; set; }
}
public class Weather
{
public string description { get; set; }
}
}
Lưu ý:
- Code trên sử dụng thư viện
Newtonsoft.Json
để xử lý dữ liệu JSON. Bạn cần thêm thư viện này vào project. - Thay
YOUR_API_KEY
bằng API key của bạn từ trang web OpenWeatherMap. - Code trên chỉ hiển thị một số thông tin cơ bản về thời tiết. Bạn có thể mở rộng chức năng để hiển thị thêm các thông tin khác như độ ẩm, áp suất, gió,…
Bài tập 4: Tạo ứng dụng chơi game đơn giản
Mục tiêu: Nắm vững cách sử dụng Timer, cách xử lý va chạm, cách tạo hiệu ứng động.
Yêu cầu:
- Tạo một ứng dụng chơi game đơn giản như game bắn bóng, game xếp hình, game đua xe, game platformer,…
- Ứng dụng cần có các yếu tố cơ bản như:
- Giao diện game.
- Chuyển động của nhân vật/vật thể.
- Xử lý va chạm.
- Tạo hiệu ứng động.
Lời giải:
Ví dụ code cho game bắn bóng:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace BaiTapWinform
{
public partial class Form1 : Form
{
// Biến toàn cục
private int ballX, ballY, ballDX, ballDY;
private int paddleX, paddleY;
private bool gameOver;
public Form1()
{
InitializeComponent();
// Khởi tạo vị trí và hướng di chuyển của bóng
ballX = ClientSize.Width / 2;
ballY = ClientSize.Height - 50;
ballDX = 5;
ballDY = -5;
// Khởi tạo vị trí của thanh chắn
paddleX = ClientSize.Width / 2 - 50;
paddleY = ClientSize.Height - 20;
// Khởi tạo trạng thái game
gameOver = false;
// Bắt sự kiện Timer
timer1.Tick += Timer1_Tick;
timer1.Interval = 20;
timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
// Di chuyển bóng
ballX += ballDX;
ballY += ballDY;
// Kiểm tra va chạm với tường
if (ballX < 0 || ballX > ClientSize.Width - 10)
{
ballDX = -ballDX;
}
if (ballY < 0)
{
ballDY = -ballDY;
}
// Kiểm tra va chạm với thanh chắn
if (ballX >= paddleX && ballX <= paddleX + 100 && ballY >= paddleY && ballY <= paddleY + 10)
{
ballDY = -ballDY;
}
// Kiểm tra bóng rơi xuống
if (ballY > ClientSize.Height)
{
gameOver = true;
timer1.Stop();
MessageBox.Show("Game Over!");
}
// Vẽ bóng và thanh chắn
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// Vẽ bóng
e.Graphics.FillEllipse(Brushes.Red, ballX, ballY, 10, 10);
// Vẽ thanh chắn
e.Graphics.FillRectangle(Brushes.Blue, paddleX, paddleY, 100, 10);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Left && paddleX > 0)
{
paddleX -= 10;
}
if (e.KeyCode == Keys.Right && paddleX < ClientSize.Width - 100)
{
paddleX += 10;
}
Invalidate();
}
}
}
Lưu ý:
- Code trên chỉ là ví dụ cơ bản cho game bắn bóng. Bạn có thể thêm nhiều tính năng phức tạp hơn như:
- Thêm nhiều loại bóng với màu sắc khác nhau.
- Thêm các vật cản.
- Thêm điểm số.
- Thêm hiệu ứng âm thanh.
Kết luận
Qua những bài tập lớp Winform C# có lời giải trên, hy vọng bạn đã nắm vững kiến thức cơ bản về Winform và có thể tự tin tạo ra các ứng dụng GUI của riêng mình. Việc luyện tập thường xuyên và sáng tạo là chìa khóa để nâng cao kỹ năng lập trình Winform. Hãy tiếp tục khám phá và thử nghiệm các bài tập khác để nâng cao kỹ năng lập trình của bạn!
FAQ:
- Làm sao để học lập trình Winform hiệu quả?
- Bắt đầu từ những kiến thức cơ bản về C# và Winform.
- Luyện tập thường xuyên qua các bài tập thực hành.
- Tham khảo các tài liệu và khóa học trực tuyến.
- Tôi nên sử dụng công cụ nào để phát triển Winform?
- Visual Studio là công cụ phát triển IDE phổ biến và mạnh mẽ cho Winform.
- Tôi có thể tìm thấy thêm tài liệu học Winform ở đâu?
- Microsoft Docs: https://docs.microsoft.com/en-us/dotnet/desktop/winforms/
- W3Schools: https://www.w3schools.com/winforms/
- Tôi có thể tìm kiếm thêm bài tập Winform ở đâu?
- Trang web code challenge như LeetCode, HackerRank, Codewars.
- Các diễn đàn lập trình như Stack Overflow.
Lưu ý:
- Các ví dụ code trên chỉ mang tính minh họa. Bạn cần phải tự mình viết code để hiểu rõ hơn các chức năng và cách thức hoạt động của Winform.
- Hãy nhớ rằng việc học tập là một quá trình lâu dài và đòi hỏi sự kiên trì. Hãy tiếp tục tìm hiểu và luyện tập để trở thành lập trình viên Winform chuyên nghiệp!
Kêu gọi hành động: Khi cần hỗ trợ hãy liên hệ Số Điện Thoại: 02033846993, Email: [email protected] Hoặc đến địa chỉ: X2FW+GGM, Cái Lân, Bãi Cháy, Hạ Long, Quảng Ninh, Việt Nam. Chúng tôi có đội ngũ chăm sóc khách hàng 24/7.