|
HỒ LÔ BIẾN |
|
Giải pháp tạo và
xử lý menu nội dung động trong chương trình e-CHÍP
Từ điển
TRẦN ANH VŨ |
|
I. Vấn
đề: |
|
Trong lập trình, nhiều khi lập trình viên gặp phải
tình huống phải tạo menu (thực đơn) có các mục con
(Menu Item) không cố định, thậm chí không thể biết
trước được nội dung cũng như những tình huống cần xử
lý đối với nội dung đó. |
|
Lấy
ví dụ, trong chương trình “e-CHÍP Từ điển”, bạn có
nhu cầu tạo menu ngữ cảnh cho phép người dùng tra
chéo từ trong các từ điển khác khi nhấp phải chuột
vào từ đã chọn. Mới nghe qua tưởng thật đơn giản,
nhưng vì đặc điểm cho phép người dùng tạo thêm, xóa
từ điển nên số lượng và tên từ điển trong chương
trình là các giá trị không thể biết trước, mà đã
không biết trước thì lập trình viên không thể đưa
vào mã nguồn khi lập trình được. |
|
Vậy làm cách nào tạo được menu mà các mục con thay
đổi theo những gì chương trình trên máy người dùng
có, và quan trọng là làm cách nào để xử lý tình
huống khi người dùng chọn một mục trong menu động
ấy? |
|
II. Cấu
trúc dữ liệu: |
|
1. Danh sách từ điển: danh sách này được lưu
trong cột Ten_Tu_Dien của bảng tblThongTinTuDien,
thuộc tập tin CSDL thongtin.mdb. Ta sẽ đưa mỗi hàng
của cột Ten_Tu_Dien (tương ứng với tên của từ điển)
thành các mục con của menu ngữ cảnh tra chéo. |
|
Bảng tblThongTinTuDien: |
|
STT |
Ten_Tu_Dien |
Ten_Tap_Tin_Tu_Dien |
|
1 |
Từ điển Nhật – Việt |
echipnhatviet.mdb |
|
2 |
Từ điển Tin học |
echiptinhoc.mdb |
|
3 |
Từ điển Thuật ngữ tin học |
echipthuatngutinhoc.mdb |
|
2. Xử lý tình huống: khi người dùng nhấp
chuột vào một mục trong menu ngữ cảnh tra chéo,
chương trình phải xác định được người dùng đã nhấp
chọn mục nào và đưa ra phương thức xử lý cho sự kiện
đó, một sự kiện mà chỉ phát sinh trong lúc thực thi
chương trình. |
|
III.
Giải pháp: |
|
Minh họa bằng ngôn ngữ Visual Basic .NET và môi
trường lập trình Visual Studio .NET 2003. |
|
1. Tạo menu ngữ cảnh: |
|
Trong trang Design, bạn chỉ cần tạo ra một
ContextMenu (Name: menuTraCheo), rồi nhấp kép vào
biểu tượng menuTraCheo trong vùng các điều khiển
không hiển thị để chuyển sang trang Code. Tại đây,
bạn sẽ đứng trong thủ tục xử lý sự kiện khi menu
hiện ra (Popup): |
|
Private Sub
menuTraCheo_Popup(ByVal
sender As
System.Object, ByVal e
As System.EventArgs)
Handles
menuTraCheo.Popup |
|
Bây giờ, bạn chỉ việc truy vấn bảng
tblThongTinTuDien của CSDL thongtin.mdb để lấy ra
danh sách tên từ điển, rồi đưa vào chứa trong
dataset nào đó. Tiếp đến, dùng lệnh lặp for
đưa (Add) từng hàng vào menuTraCheo. Ví dụ đoạn mã
của chương trình “e-CHÍP Từ điển”: |
|
Private Sub menuTraCheo_Popup(ByVal sender As
System.Object, ByVal e As System.EventArgs) _
Handles menuTraCheo.Popup
Const strConnection As String =
"Provider=Microsoft.Jet.OLEDB.4.0;Data _
Source=.\data\thongtin.mdb"
Dim datasetDanhSachTuDien As New DataSet
Dim objConnection As New
OleDb.OleDbConnection(strConnection)
objConnection.Open()
Const strLayDanhSachTuDien As String = "SELECT
Ten_Tu_Dien FROM tblThongTinTuDien _ ORDER BY
Ten_Tu_Dien"
Dim objDataAdapter As New
OleDb.OleDbDataAdapter(strLayDanhSachTuDien,
strConnection)
datasetDanhSachTuDien.Clear()
objDataAdapter.Fill(datasetDanhSachTuDien,
"tbleChipDanhSachTuDien")
menuTraCheo.MenuItems.Clear()
Dim intSoTuDien As Integer = _
datasetDanhSachTuDien.Tables("tbleChipDanhSachTuDien").Rows.Count
For i As Integer = 1 To intSoTuDien
menuTraCheo.MenuItems.Add(datasetDanhSachTuDien.Tables("tbleChipDanhSachTuDien").Rows(i
- 1)(0), New System.EventHandler(AddressOf
Me.menuTraCheo_OnClick))
Next
objConnection.Close()
End Sub |
|
2. Xử lý tình huống nhấp chọn mục con: |
|
Bạn để ý trong đoạn mã trên, tại câu lệnh Add để
thêm vào từng đề mục con cho menuTraCheo, tôi có sử
dụng thêm New System.EventHandler(AddressOf
Me.menuTraCheo_OnClick) nhằm mục đích báo cho trình
biên dịch biết là “Hãy xử lý tình huống nhấp chọn
mục con xyz bằng thủ tục menuTraCheo_OnClick”. Hiệu
quả của việc làm này là cho dù trong menuTraCheo có
những gì đi chăng nữa, khi người dùng nhấp chọn một
mục bất kỳ thì tình huống menuTraCheo_OnClick cũng
đều được gọi. |
|
Bây giờ, bạn tạo thủ tục xử lý tình huống nhấp chọn
mục con menuTraCheo_OnClick được rồi đấy. Nhiệm vụ
của bạn là phải bắt lấy tên của mục con được nhấp,
sau đó dựa vào tên này rồi truy vấn trong bảng
tblThongTinTuDien để lấy ra tên tập tin từ điển
tương ứng. Đoạn mã ví dụ của chương trình “e-CHÍP Từ
điển”: |
|
Protected Sub menuTraCheo_OnClick(ByVal sender As
System.Object, ByVal e As System.EventArgs)
'Lấy tên từ điển tra chéo
Dim strTenTuDienTraCheo As String = sender.Text
'Lấy từ muốn tra chéo
Dim strTuMuonTraCheo As String
strTuMuonTraCheo =
Trim(richNghiaTuDangTra.SelectedText)
If strTuMuonTraCheo.Length > 0 Then
'Chuẩn bị khung thoại Tra chéo
Dim formTraCheo As Form = New frmNghiaTuTraCheo
formTraCheo.Text = strTenTuDienTraCheo & "@" &
strTuMuonTraCheo
formTraCheo.Location = Me.MousePosition
formTraCheo.StartPosition = FormStartPosition.Manual
formTraCheo.Show()
Else
MessageBox.Show("Trước tiên, Bạn phải chọn từ muốn
tra chéo.", "Phát hiện ra lỗi!!!",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub |
|
IV. Kết luận: |
|
Trong hai đoạn mã minh họa, thật ra còn một số điều
khá hay nhưng tôi chưa thể trình bày được vì nó
không thuộc phạm vi bài viết này, với lại chúng còn
liên quan đến nhiều phần trong cả chương trình
“e-CHÍP từ điển”. Nhưng dù sao, như bạn thấy thì với
giải pháp đã được trình bày, vấn đề về tạo menu
động, thay đổi và không thể xác định trước lúc lập
trình đã được giải quyết. Hi vọng bài viết sẽ giúp
ích chút gì đó cho các bạn lập trình viên. |
|
Bạn có thể tải mã nguồn của chương trình “e-CHÍP Từ
điển 2.1” về để tìm hiểu thêm cách thức và giải pháp
cho các vấn đề về quản lý từ điển tại
www.echip.com.vn. |
|
TIẾN TRÌNH DỰ ÁN E-CHÍP TỪ
ĐIỂN |
|
Trong tuần đầu tiên, diễn tiến của “Dự án e-CHÍP Từ
điển” như sau: |
|
- Hoàn thành bộ Từ điển thuật ngữ tin học với 1.381
từ, tham khảo tài liệu của Microsoft Việt Nam, giúp
ích trong việc dịch thuật tài liệu Tin học. |
|
- Kết thúc nhập liệu 2.000 từ đầu tiên của Từ điển
Nhật – Việt. |
|
- Công ty Vietsovpetro (105 Vũng Tàu) đảm nhiệm việc
nhập liệu cho Từ điển Nga – Việt (Từ điển tổng hợp
và Từ điển Kỹ thuật) và Từ điển Việt – Nga. |
|
- Phiên bản “e-CHÍP Từ điển 2.1” mới, bổ sung thêm
tính năng tra chéo giữa các từ điển có trong chương
trình. |
|
Xem chi tiết thông tin vể dự án tại địa chỉ
http://www.echip.com.vn/echiproot/html/tudienechip/giaiphap.html. |
|
|