III- Code
1. Form frmPortal :
- Đây có thể nói là form dễ code nhất

. Chỉ có 2 sự kiện :
Code: Select all
Private Sub butQuanLi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butQuanLi.Click frmQuanLi.ShowDialog(Me) End Sub Private Sub butTracNghiem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butTracNghiem.Click frmTracNghiem.ShowDialog(Me) End Sub
- Chỉ có vậy

.
2. Form frmQuanLi :
- Đầu tiên ta phải đọc file Data.ini để hiện thư viện, và dùng biến toàn cục này để quản lí trong suốt quá trình xử lí form. Để tiện, mình khuyên nên tạo một Structure, việc này lẽ ra đặt ở form Portal là hợp nhất, nhưng làm ở đâu cũng được

.
- Đầu tiên, Import Namespace IO vào :
- Đây là Structure CauHoi và khai báo 1 biến :
Code: Select all
Public Structure CauHoi Dim Q As String Dim A1, A2, A3, A4 As String Dim A As IntegerEnd Structure Public QuanLi As CauHoi
- Vì việc đọc và hiện câu hỏi có thể sẽ phải thực hiện nhiều lần, bạn nên tạo một Sub :
Code: Select all
Public Sub HienCauHoi() '=====Đọc nội dung=====' 'Đọc nội dung file và chia nội dung thành nhiều câu hỏi 'Đọc nội dung : File.ReadAllText("Data.ini") 'Chia thành nhiều câu phân cách bằng vbNewLine (là vbCrLf) : 'Khai báo Dim Content As String() tương đương Dim Content() As String Dim Content As String() = Split(File.ReadAllText("Data.ini"), vbNewLine) ReDim QuanLi(Content.Length - 1) 'Quét từng dòng 'Phân tiếp thành 6 phần : Câu hỏi, 4 câu trả lời và đáp án bởi dấu / For i As Integer = 0 To Content.Length - 1 Dim Temp() As String = Split(Content(i), "/") QuanLi(i).Q = Temp(0) QuanLi(i).A1 = Temp(1) : QuanLi(i).A2 = Temp(2) : QuanLi(i).A3 = Temp(3) : QuanLi(i).A4 = Temp(4) QuanLi(i).A = Val(Temp(5)) Next '=====Hiển thị=====' 'Đừng hỏi vì sao mà mỗi lần gọi là cái listbox dài ra thêm, vì thiếu dòng này : lstList.Items.Clear() For i As Integer = 0 To QuanLi.Length - 1 lstList.Items.Add("Câu " & i + 1) Next End Sub
- Xong, trong sự kiện Form_Load, hãy gọi sub HienCauHoi :
Code: Select all
Private Sub frmQuanLi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load HienCauHoi() End Sub
- Bây giờ mỗi lần click chuột lên Listbox, chương trình sẽ hiện nội dung câu hỏi và đáp án :
Code: Select all
Private Sub lstList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstList.SelectedIndexChanged If lstList.SelectedIndex <> -1 Then 'Nếu SelectIndex = -1 nghĩa là không chọn gì cả! With QuanLi(lstList.SelectedIndex) 'Cấu trúc With...End With cho bạn khỏi nói gì nữa mà . ngay thì sẽ hiểu là cái sau With txtNoiDung.Text = .Q & vbNewLine & _ "Đáp án 1 : " & .A1 & vbNewLine & _ "Đáp án 2 : " & .A2 & vbNewLine & _ "Đáp án 3 : " & .A3 & vbNewLine & _ "Đáp án 4 : " & .A4 txtTraLoi.Text = "Đáp án đúng : " & .A + 1 End With End If End Sub
- Như đã nói ở trên, mình dùng chung frmBienTap cho cả việc thêm và sửa, vì vậy phải có cái gì đó để phân biệt 2 cái. Nếu bạn để ý thì control nào cũng có thuộc tính Tag cả! Đó có thể xem là 1 thuộc tính để bạn lưu gì thì tuỳ, giống như ghi chú. Ta sẽ sử dụng nó. Bạn làm 2 sự kiện click cho butThem và butSua như sau :
Code: Select all
Private Sub butThem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butThem.Click frmBienTap.Tag = "Add" frmBienTap.ShowDialog(Me) HienCauHoi()'Để lúc thay đổi thì chương trình sẽ hiện lại End Sub Private Sub butSua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butSua.Click If lstList.SelectedIndex = -1 Then MsgBox("Vui lòng chọn câu hỏi cần sửa!", MsgBoxStyle.Critical) Exit Sub End If frmBienTap.Tag = lstList.SelectedIndex frmBienTap.ShowDialog(Me) HienCauHoi() End Sub
- Không còn phải lo cho 2 nút đó nữa, vì form biên tập sẽ “xử” nó

. Giờ tới nút xoá.
Code: Select all
Private Sub butXoa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butXoa.Click '====Xác định dòng định xoá====' 'Kiểm tra người dùng đã chọn gì chưa If lstList.SelectedIndex = -1 Then MsgBox("Vui lòng chọn câu hỏi cần xoá!", MsgBoxStyle.Critical) Exit Sub End If 'Xác nhận If MsgBox("Bạn có chắc muốn xoá?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.No Then Exit Sub 'Dòng cần xoá chính là dòng đang chọn trong Listbox (tính từ 0) Dim DongXoa As Integer = lstList.SelectedIndex '=====Xoá=====' 'Xoá bằng cách đưa từng câu vào mảng, sau đó đặt nội dung của câu cần xoá thành "" Dim Content As String() = Split(File.ReadAllText("Data.ini"), vbNewLine) Content(DongXoa) = "" 'Xong rồi, giờ nhập trở lại, tuy nhiên, sẽ có 1 câu có 2 dấu xuống hàng, xoá bớt 1 cái Dim St As String = Join(Content, vbNewLine) St = Replace$(St, vbNewLine & vbNewLine, vbNewLine).Trim 'Lưu File.WriteAllText("Data.ini", St) 'Xong :D Hiện nội dung lại HienCauHoi() End Sub
- OK, form này coi như ổn.