-
Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
Xuân Thanh > 15-04-19, 06:10 PM
Bài 1 : Tạo MeNu bằng Navigation Form
Dear All
Việc tạo MeNu bằng Macro và Code đã có nhiều bài viết trên diễn đàn. Hôm nay xin giới thiệu với các bạn một cách đơn giản là tận dụng Navigation Form để làm MuNu. Các bạn xem hình ảnh sau
1/ Khi mở Chương trình thì hiển thị MeNu Form ngay. Tất cả các MeNu đều bị Enabled, riêng MeNu Hệ Thống là khả dụng
2/ Sau khi kích SubMeNu Đăng Nhập hiển thị frmDangNhap
3/ Khi Đăng Nhập thành công trở lại Menu Form thì tất cả các MeNu đều khả dụng, SubMeNu Đăng Nhập bị Enabled
4/ Kích các MeNu sẽ xòe các SubMeNu tương ứng
4.1/ Danh Mục
4.2/ Nhập Liệu
4.3/ Báo Cáo
4.4.1/ Quản Trị (khi quyền không phải là addmin)
4.4.2/ Quản Trị (khi quyền là addmin)
4.5/ Help
Việc phân quyền các bạn tham khảo cách phân quyền của bạn maidinhdan trên diễn đàn nhé
Khi đăng nhập sẽ chỉ định tên người đăng nhập qua một biến toàn cục để xác định quyền truy cập
Mời các bạn xem qua hình ảnh rồi mai ta tiếp tục nhé
Thân mến -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
lmthu > 16-04-19, 08:35 AM
Xin bổ sung:
Tính năng tạo Navigation Form chỉ có từ Access 2010 trở lên -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
Xuân Thanh > 16-04-19, 09:02 AM
Bài 1 (Tiếp Theo) : Thiết kế Form MeNu
Bây giơ chúng ta băt tay vào thiết kế
Trong Menu Create của Access, chúng ta chọn Navigation. Trong này xổ ra một loạt các dạng Form khác nhau, các bạn tự tìm hiểu. Ở đây tôi chọn dạng Horizontal Tabs. Khi chọn xong, Access se tạo cho ta một form đang View. Chúng ta Design View form lại sẽ thấy thế này
Dùng chuột kéo sát về góc trên bên trái ta thấy form như sau
Lần lượt ghi tên các MeNu vào ô AddNew, đặt tên cho nó, chỉnh font, màu...,sửa tiêu dề form qua Property Sheet. Cuối cùng chúng ta được form như sau
Các bạn cũng có thể thay logo của form như trong hình bằng cách chọn logo theo ý muốn rồi chèn qua Property Sheet. Diều tôi quan tâm nhất đên các bạn là cai phần Unbound phía dưới form. Kích vào nó nhìn qua Property Sheet chúng ta thây nó chính là một NavigationSubForm. Nơi này chính là nơi ta đặt các thành phân của SubMenu vào. Hãy đặt tên cho NavigationSubForm này để tiện cho việc viết code về sau. Ở đây tôi đăt tên cho nó là QuanLyKhoSub
Để tạo các SubMenu chúng ta dùng chiêu một chút. Chúng ta thiết kế các form tạo SubMenu như cách tạo các form thông thường. Trên các form này ta chỉ vẽ các Command Buton mà thôi để khi click vào nó thì mở các form tương ứng. Đặt tên cho các cmd này và viết code cho sự kiên click của nó. Ví dụ
Mã:Pfivate Sub cmdDangNhap_Click()
DoCmd.OpenForm "frmDangNhap"
End Sub
Dưới đây là hình ảnh của hai form frmHeThong và frmDanh Mục ở dạng design
Lưu ý các bạn điều chỉnh các cmd cho hợp lý để sau khi view form các cmd này nằm ngay phía dưới các MeNu -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
Xuân Thanh > 16-04-19, 09:26 AM
Bài 1(Tiếp thep) : Nhúng SubMeNu
Mở form Menu ở dạng design. Kích MeNu Hệ Thống, nhìn qua Property Sheet mục Data. Trong phần Navigation Target Name, xổ mũi tên xuống ta chọn frmHeThong đã thiết kế ở trên. Làm tương tụ cho các Menu còn lại. Vậy là ta đã thiết kế xong một Menu MainForm rồi
Nói thêm : Như bạn lmthu đã nói Navigation Form chỉ có từ Access 2010 trở lên. Tại sao Access có sẵn ta không tận dụng dể làm
Toàn bộ code của form này như sau :
Mã:Option Compare Database
Option Explicit
Private Sub Form_Load()
Me.DanhMuc.Enabled = False: Me.NhapLieu.Enabled = False
Me.BaoCao.Enabled = False: Me.QuanTri.Enabled = False: Me.Help.Enabled = False
End Sub
Private Sub HeThong_Click()
If strID = "" Then
Me.QuanLyKhoSub.Form!cmdDangNhap.Enabled = True
Else
Me.QuanLyKhoSub.Form!cmdDangNhap.Enabled = False
End If
End Sub
Private Sub QuanTri_Click()
If strID = "addmin" Then
Me.QuanLyKhoSub.Form!cmdNhanVien.Enabled = True
Me.QuanLyKhoSub.Form!cmdPhanQuyen.Enabled = True
Else
Me.QuanLyKhoSub.Form!cmdNhanVien.Enabled = False
Me.QuanLyKhoSub.Form!cmdPhanQuyen.Enabled = False
End If
End Sub
Giải thích một chút : Như đã nói ở phần trên ta tạo một biến toàn cục strID để khi đăng nhập sẽ ghi biến này vào bộ nhớ và từ biến này để điều khiển các SubMeNu có bị Enabled hay không. Ở đây tôi chỉ mới phân quyền cho addmi là người quản trị thôi chưa phân quyền chi tiết. Khi có phân quyền chi tiết thì lúc click các Menu sẽ gọi hàm PhanQuyen để chỉ định các SubMenu nào được khả dụng(sẽ nói ở phần sau) -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
tieu_ngao > 20-04-19, 01:57 PM
(16-04-19, 09:02 AM)Xuân Thanh Đã viết: Bài 1 (Tiếp Theo) : Thiết kế Form MeNu
Bài viết này rất hay, cám ơn bạn Xuân Thanh.
Bây giơ chúng ta băt tay vào thiết kế
Trong Menu Create của Access, chúng ta chọn Navigation. Trong này xổ ra một loạt các dạng Form khác nhau, các bạn tự tìm hiểu. Ở đây tôi chọn dạng Horizontal Tabs. Khi chọn xong, Access se tạo cho ta một form đang View. Chúng ta Design View form lại sẽ thấy thế này
Dùng chuột kéo sát về góc trên bên trái ta thấy form như sau
Lần lượt ghi tên các MeNu vào ô AddNew, đặt tên cho nó, chỉnh font, màu...,sửa tiêu dề form qua Property Sheet. Cuối cùng chúng ta được form như sau
Các bạn cũng có thể thay logo của form như trong hình bằng cách chọn logo theo ý muốn rồi chèn qua Property Sheet. Diều tôi quan tâm nhất đên các bạn là cai phần Unbound phía dưới form. Kích vào nó nhìn qua Property Sheet chúng ta thây nó chính là một NavigationSubForm. Nơi này chính là nơi ta đặt các thành phân của SubMenu vào. Hãy đặt tên cho NavigationSubForm này để tiện cho việc viết code về sau. Ở đây tôi đăt tên cho nó là QuanLyKhoSub
Để tạo các SubMenu chúng ta dùng chiêu một chút. Chúng ta thiết kế các form tạo SubMenu như cách tạo các form thông thường. Trên các form này ta chỉ vẽ các Command Buton mà thôi để khi click vào nó thì mở các form tương ứng. Đặt tên cho các cmd này và viết code cho sự kiên click của nó. Ví dụ
Mã:Pfivate Sub cmdDangNhap_Click()
DoCmd.OpenForm "frmDangNhap"
End Sub
Dưới đây là hình ảnh của hai form frmHeThong và frmDanh Mục ở dạng design
Lưu ý các bạn điều chỉnh các cmd cho hợp lý để sau khi view form các cmd này nằm ngay phía dưới các MeNu
Tuy nhiên khi mình làm theo hướng dẫn trên thì khi mở Navigation Form lên thì mặc định menu Hệ thống và các submenu của Hệ thống hiện ra luôn. Có cách làm chỉ khi click chuột vào thì nó mới hiện ra ko bạn? -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
Xuân Thanh > 20-04-19, 05:34 PM
(20-04-19, 01:57 PM)tieu_ngao Đã viết: Bài viết này rất hay, cám ơn bạn Xuân Thanh.
Tuy nhiên khi mình làm theo hướng dẫn trên thì khi mở Navigation Form lên thì mặc định menu Hệ thống và các submenu của Hệ thống hiện ra luôn. Có cách làm chỉ khi click chuột vào thì nó mới hiện ra ko bạn?
Sửa lại một chút
Mã:Private Sub Form_Load()
Me.DanhMuc.Enabled = False: Me.NhapLieu.Enabled = False
Me.BaoCao.Enabled = False: Me.QuanTri.Enabled = False: Me.Help.Enabled = False
Me.QuanLyKhoSub.Form!cmdDangNhap.Visible = False
Me.QuanLyKhoSub.Form!cmdDangKy.Visible = False
Me.QuanLyKhoSub.Form!cmdNhapSerial.Visible = False
Me.QuanLyKhoSub.Form!cmdThoat.Visible = False
End Sub
Private Sub HeThong_Click()
Me.QuanLyKhoSub.Form!cmdDangNhap.Visible = True
Me.QuanLyKhoSub.Form!cmdDangKy.Visible = True
Me.QuanLyKhoSub.Form!cmdNhapSerial.Visible = True
Me.QuanLyKhoSub.Form!cmdThoat.Visible = True
If strID = "" Then
Me.QuanLyKhoSub.Form!cmdDangNhap.Enabled = True
Else
Me.QuanLyKhoSub.Form!cmdDangNhap.Enabled = False
End If
End Sub -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
DooHoaangPhuuc > 21-04-19, 10:11 PM
Cháu làm theo hướng dẫn , cũng như Chú Tieu_Ngao đề cập thì các SubMenu của "Hệ Thống" gồm "Đăng Nhập, Đăng ký, Nhập Serial, Thoát" vẫn luôn hiện thị khi mở Form QuanLyKhoSub.
Hình minh hoạ :
Khi code để các nút cmdDangNhap, ....cmdThoat . Enabled = False thì bị lỗi như hình
Cháu thử gõ phím dò theo tự động hướng dẫn trong VBA nhưng chưa tìm ra.
Cháu xin hỗ trợ giúp code lại.
Cháu DooHoaangPhuuc -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
Xuân Thanh > 22-04-19, 07:36 AM
(21-04-19, 10:11 PM)DooHoaangPhuuc Đã viết: Cháu làm theo hướng dẫn , cũng như Chú Tieu_Ngao đề cập thì các SubMenu của "Hệ Thống" gồm "Đăng Nhập, Đăng ký, Nhập Serial, Thoát" vẫn luôn hiện thị khi mở Form QuanLyKhoSub.
Cháu thử gõ phím dò theo tự động hướng dẫn trong VBA nhưng chưa tìm ra.
Cháu xin hỗ trợ giúp code lại.
Cháu DooHoaangPhuuc
Oh! Sory TieuNgao và DooHoaangPhuuc nhé. Đúng là già cả nên lẩm cẩm mất rồi. Thấy câu hỏi thì trả lời ngay mà không kiểm tra.làm như vậy báo lỗi là cái chắc
Giải thích rõ hơn vì sao lại lỗi. Mặc nhiên ta thiết kế cho Menu Hệ Thống và các SubMenu đi kèm khi mở Form sẽ hiển thị ngay tức là nó sẽ nhận focus ngay khi load form. Một control khi nhận focus thì không thể Visible nó được (nhưng Enabled thì OK). Vì vậy các câu lệnh trên sẽ bị lỗi. Các control đã bị Visible thì ta có thể cho hiện lại được. Vì vậy ta phải dùng một chút mẹo nhỏ
Mở lại frmHeThong đã thiết kế trước ở dạng design. Vào PropectySheet của form, Visible tất cả các cmd Đăng Nhập, Đăng Ký...
Code load MainForm giữ nguyên như cũ, chỉ chỉnh lại code cho Menu Hệ Thống thôi
Mã:Private Sub Form_Load()
Me.DanhMuc.Enabled = False: Me.NhapLieu.Enabled = False
Me.BaoCao.Enabled = False: Me.QuanTri.Enabled = False: Me.Help.Enabled = False
End Sub
Private Sub HeThong_Click()
Me.QuanLyKhoSub.Form!cmdDangNhap.Visible = True
Me.QuanLyKhoSub.Form!cmdDangKy.Visible = True
Me.QuanLyKhoSub.Form!cmdNhapSerial.Visible = True
Me.QuanLyKhoSub.Form!cmdThoat.Visible = True
If strID = "" Then
Me.QuanLyKhoSub.Form!cmdDangNhap.Enabled = True
Else
Me.QuanLyKhoSub.Form!cmdDangNhap.Enabled = False
End If
End Sub
Lưu ý : Tên SubMenu Không được ddaatf trùng với tên của Main Form -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
Xuân Thanh > 22-04-19, 08:05 AM
Các bạn có thể chỉnh lý lại form MeNu như thế này được không? Nhìn có vẻ chuyên nghiệp hơn một chút nhỉ
Đơn giản thôi mà -
RE: Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
tieu_ngao > 23-04-19, 02:01 PM
(21-04-19, 10:11 PM)DooHoaangPhuuc Đã viết: Cháu làm theo hướng dẫn , cũng như Chú Tieu_Ngao đề cập thì các SubMenu của "Hệ Thống" gồm "Đăng Nhập, Đăng ký, Nhập Serial, Thoát" vẫn luôn hiện thị khi mở Form QuanLyKhoSub.
- Ở sự kiện on open của form Quankykhosub bạn thêm vào code này:
Hình minh hoạ :
Khi code để các nút cmdDangNhap, ....cmdThoat . Enabled = False thì bị lỗi như hình
Cháu thử gõ phím dò theo tự động hướng dẫn trong VBA nhưng chưa tìm ra.
Cháu xin hỗ trợ giúp code lại.
Cháu DooHoaangPhuuc
- Ở sự kiện Onclick Hệ thống:Mã:Private Sub Form_Load()
Me.Hethong.Enabled = True (mấy cái còn lại cho False hết)
Me.NavigationSubform.Visible = False
- Và ở sự kiện On load Focus của Hệ thồngMã:Private Sub Hethong_Click()
Me.NavigationSubform.Visible = True
End Sub
Tương tự cho các menu còn lại như vậy sẽ giải quyết được vấn đề của bạn.Mã:Private Sub Hethong_LostFocus()
Me.NavigationSubform.Visible = False
End Sub