Structure trong VB.Net
Cấu trúc là một kiểu dữ liệu do người dùng tự định nghĩa (user-defined data type) dùng để tập hợp các thành phần dữ liệu có quan hệ với nhau thành một cấu trúc duy nhất. Structure tương tự như class chẳng hạn nó có các fields và các methods,… Tuy nhiên, điểm khác biệt lớn nhất giữa structure và class đó là structure mang kiểu tham chiếu(reference type) còn structure mang kiểu giá trị(value type). Thông thường structure dùng cho các kiểu hạng nhẹ và thời gian tồn tại trong bộ nhớ ngắn trong khi class được dùng cho các đối tượng lớn và thời gian tồn tại trong bộ nhớ lâu. Tuy vậy, xu hướng thì người ta thích dùng các class hơn bởi tính chất hướng đối tượng của nó.
Để khai báo 1 cấu trúc, người ta dùng từ khóa structure.
Ví dụ:
Structure Sinhvien
Dim masv As String
Dim hoten As String
Dim ngaysinh As Date
Dim diemtoan As Integer
Dim diemly As Integer
Dim diemhoa As Integer
End Structure
Trong ví dụ sau, chúng ta cùng xét đến structure và việc dùng 1 mảng quản lý 1 danh sách các phần tử mang cấu trúc này.
Với cấu trúc đặc tả 1 sinh viên như trên, ta khai báo 1 mảng các phần tử c1 kiểu dữ liệu là cấu trúc này:
Public dssv(0 To 1000) As Sinhvien
Giao diện đề nghị cho ứng dụng như sau:

Các TextBox cho người dụng nhập dữ liệu. Khi người dùng nhấn nút Thêm, dữ liệu sẽ được lưu vào mảng
Khi người dùng nhấn nút Xóa, dữ liệu của item hiện tại sẽ bị xóa khỏi mảng
Khi người dùng thay đổi dữ liệu rồi nhấn nút Sửa, dữ liệu của item hiện tại sẽ được cập nhật vào mảng.
Khi người dùng nhấn nút In DS, cửa sổ sau sẽ xuất hiện:

Code hướng dẫn:
| Module QLSV dùng chung |
| Module QLSV’cấu trúc đặc tả thông tin về 1 sinh viên
Structure Sinhvien Public sosv As Integer = 0 End Module |
Thiết kế Form: frmSinhvien

frmDanhsachSV

| Code cho Form frmSinhvien |
| Public Class frmSinhvien
‘biến dùng để lưu giữ vị trí hiện tại của các phần tử Private current As Integer = 0 Private Sub btnThem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThem.Click ‘có thể kiểm tra các giá trị hợp lệ không ở đây ‘… Dim sv As Sinhvien sv.masv = txtMS.Text sv.hoten = txtHT.Text sv.ngaysinh = dtpNS.Value sv.diemtoan = Convert.ToInt16(txtDT.Text) sv.diemly = Convert.ToInt16(txtDL.Text) sv.diemhoa = Convert.ToInt16(txtDH.Text) AddSV(sv) lblRecs.Text = (current + 1).ToString() + ” / ” + sosv.ToString() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load sosv = 0 lblRecs.Text = current.ToString() + ” / ” + sosv.ToString() End Sub Private Sub btnInDS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInDS.Click Dim frm As New frmDanhsachSV frm.ShowDialog(Me) End Sub Private Sub btnNavigate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click, btnPrev.Click, btnNext.Click, btnLast.Click Dim btn As Button = sender If (btn.Text = “|<”) Then current = 0 FillList() ElseIf (btn.Text = “<”) Then If current > 0 Then current = current – 1 FillList() End If ElseIf (btn.Text = “>”) Then If current < (sosv – 1) Then current = current + 1 FillList() End If ElseIf (btn.Text = “>|”) Then current = sosv – 1 FillList() End If End Sub Private Sub FillList() If sosv = 0 Then Return End If Dim sv As Sinhvien = dssv(current) txtMS.Text = sv.masv txtHT.Text = sv.hoten txtDT.Text = sv.diemtoan txtDL.Text = sv.diemly txtDH.Text = sv.diemhoa dtpNS.Value = sv.ngaysinh lblRecs.Text = (current + 1).ToString() + ” / ” + sosv.ToString() End Sub Private Sub btnXoa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXoa.Click Xoa(current) End Sub Private Sub btnSua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSua.Click dssv(current).hoten = txtHT.Text dssv(current).ngaysinh = dtpNS.Value dssv(current).diemtoan = Convert.ToInt16(txtDT.Text) dssv(current).diemly = Convert.ToInt16(txtDL.Text) dssv(current).diemhoa = Convert.ToInt16(txtDH.Text) End Sub End Class |
| Code cho form frmDanhsachSV |
| Public Class frmDanhsachSV
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 0 To sosv – 1 Dim s As Sinhvien = dssv(i) lstMSSV.Items.Add(s.masv) lstHT.Items.Add(s.hoten) lstNS.Items.Add(s.ngaysinh.ToString) lstToan.Items.Add(s.diemtoan) lstLy.Items.Add(s.diemly) lstHoa.Items.Add(s.diemhoa) Dim tb As Double = (s.diemhoa + s.diemly + s.diemtoan) / 3 lstTB.Items.Add(tb.ToString) Next End Sub ”’ <summary> ”’ Sự kiện này dùng chung cho tất cả các ListBox trong form. ”’ Mục dích là khi chọn bất kỳ 1 phần tử nào trên 1 listbox thì tất cả ”’ các listbox còn lại sẽ chọn đúng vị trí mà bạn chọn ”’ </summary> ”’ <param ></param> ”’ <param ></param> ”’ <remarks></remarks> Private Sub lst_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstMSSV.SelectedIndexChanged, lstToan.SelectedIndexChanged, lstTB.SelectedIndexChanged, lstNS.SelectedIndexChanged, lstLy.SelectedIndexChanged, lstHT.SelectedIndexChanged, lstHoa.SelectedIndexChanged Dim lst As ListBox = sender Dim index As Integer = lst.SelectedIndex Dim ctls As Control For Each ctls In Me.Controls If (TypeOf (ctls) Is ListBox) Then lst = ctls lst.SelectedIndex = index End If Next End Sub End Class |
Lưu ý : do tính chất của bài toán mang tính đơn giản và phục vụ cho mục đích ôn tập kiểm tra nên chúng ta không bàn luận sâu về tính chất chuyên môn của các nghiệp vụ quản lý sinh viên.
Cám ơn vì đã quan tâm !
Tú Quyên said
Thầy ơi cho em hỏi phần sender
Private Sub btnNavigate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click, btnPrev.Click, btnNext.Click, btnLast.Click
Dim btn As Button = sender
If (btn.Text = “|<”) Then
current = 0
end if
Khi em cài đặt bài này thì có một vấn đề đó là nếu em vô tình click chuột nhiều lần vào textbox sẽ báo lỗi do ta gán sender cho button, vậy làm sao để ta phân biệt được đâu là sender click chuột trên button đâu là trên textbox để em khắc phục lỗi này ạ.
Dim btn As Button = sender
vovanhai said
Có thể kiểm tra nó bằng cách dùng toán tử TypeOf.
if TypeOf(sender) is Button then
endif
hoctromoi said
thầy ơi,em hiện đang học cơ bản của vb.net.em có thể theo thầy học được không ạ?
LeMinh said
Public Sub Xoa(ByVal index As Integer)
If (index sosv) Then
Return
End If
For i As Integer = index To sosv – 1
dssv(i) = dssv(i + 1)
Next
sosv = sosv – 1
End Sub
*thầy ơi..em ko hiểu tại sao ngay dòng lập For thầy để
For i As Integer = index To sosv – 1
dssv(i) = dssv(i + 1)
Mà sau khi em thử thay đổi đoạn code nó vẫn chạy ok…
Dim i As Integer
For i = index To sosv
dssv(i) = dssv(i + 1)
Mong thầy giải thích…em thấy khó hiểu quá
vovanhai said
có gì đâu, nó tự động chuyển kiểu ấy mà. Tôi để tường minh.
hoang phuoc toan said
thay oi de nhung sql vao vb thi lam the nao!
tra said
Em đang gặp vần đề vế đọc file pdf sang file text(.txt) sử dụng Dim token As PRTokeniser trong VB.NET. thầy có thể chỉ cho em vài dòng code không?
Em muốn đọc từng dòng trong file pdf rồi ghi ra file text cũng theo từng dòng giống như trong file pdf vậy nhưng em làm không được chỉ đọc ra một chuổi dài thón thôi.
mong thầy giúp em!!!
Dim sb As New System.Text.StringBuilder()
Dim reader As New PdfReader(sourcePDF)
Dim pageBytes() As Byte = Nothing
Dim token As PRTokeniser = Nothing
Dim tknType As Integer = -1
Dim tknValue As String = String.Empty
Dim fromPageNum As integer
Dim toPageNum as integer
the value of toPageNum”)
For i As Integer = fromPageNum To toPageNum Step 1
pageBytes = reader.GetPageContent(i)
If Not IsNothing(pageBytes) Then
token = New PRTokeniser(pageBytes)
While token.NextToken()
tknType = token.TokenType()
tknValue = token.StringValue
If tknType = PRTokeniser.TokType.STRING Then
sb.Append(token.StringValue)
ElseIf tknType = 5 AndAlso tknValue = “” Then
sb.Append(“–”)
End If
End While
End If
Next i
Võ Văn Hải said
Tôi chưa thử nữa. Bạn nào giải quyết dùm. thanks
Tra said
thầy ơi cho em hỏi tý.em có một project viết trên VB.NET 2008. Nay em muốn tạo bộ cài(installer) để cài trên máy tính khác không có .Net Framework 3.5 nên khi cài thì em cho cài bộ .Net Framework 3.5 luôn khỏi phải down trên mạng(bộ .Net Framework 3.5 được kèm theo vo8i1 bộ cài luôn).
Thầy có thể giúp em ít code để giải quyết vấn này không?
em cám ơn thầy nhiều lắm!!
Mr Tran said
thank you
Nguyễn Trung Thanh said
thầy cho e hỏi trường mình hay trung tâm nào có dạy visual basic không ạ, E muốn học mà không biết phải học ở đâu hết!