• Tạo MeNu Form bằng Navigation Form và một số vấn đề liên quan khác
  • 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

    [Hình: ay4J2eM.png]

    2/ Sau khi kích SubMeNu Đăng Nhập hiển thị frmDangNhap

    [Hình: krZGaPm.png]

    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

    [Hình: HDbTtUc.png]

    4/ Kích các MeNu sẽ xòe các SubMeNu tương ứng
    4.1/ Danh Mục

    [Hình: ykW5Sc6.png]

    4.2/ Nhập Liệu

    [Hình: weRRwRL.png]

    4.3/ Báo Cáo

    [Hình: VtixNpW.png]

    4.4.1/ Quản Trị (khi quyền không phải là addmin)

    [Hình: M8VqF47.png]

    4.4.2/ Quản Trị (khi quyền là addmin)

    [Hình: VEMnko7.png]

    4.5/ Help

    [Hình: u6kZayS.png]


    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

    [Hình: rDY484X.png]

    Dùng chuột kéo sát về góc trên bên trái ta thấy form như sau

    [Hình: NndCZRr.png]

    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

    [Hình: DQ62tsK.png]

    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

    [Hình: jxbUIgS.png]

    [Hình: 7bFhIHL.png]


    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â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

    [Hình: rDY484X.png]

    Dùng chuột kéo sát về góc trên bên trái ta thấy form như sau

    [Hình: NndCZRr.png]

    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

    [Hình: DQ62tsK.png]

    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

    [Hình: jxbUIgS.png]

    [Hình: 7bFhIHL.png]


    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
    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?
  • 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ạ :

    [Hình: Navigation.1.jpg]

    Khi code để các nút cmdDangNhap, ....cmdThoat .   Enabled = False thì bị lỗi như hình

    [Hình: Navigation.2.jpg]

    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ỉ

    [Hình: 1DV7seS.png]

    [Hình: yynFZtU.png]

    Đơ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.
    Hình minh hoạ :

    [Hình: Navigation.1.jpg]

    Khi code để các nút cmdDangNhap, ....cmdThoat .   Enabled = False thì bị lỗi như hình

    [Hình: Navigation.2.jpg]

    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 on open của form Quankykhosub bạn thêm vào code này:
    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
    - Ở sự kiện Onclick Hệ thống:
    Mã:
    Private Sub Hethong_Click()
    Me.NavigationSubform.Visible = True
    End Sub
    - Và ở sự kiện On load Focus của Hệ thồng
    Mã:
    Private Sub Hethong_LostFocus()
    Me.NavigationSubform.Visible = False
    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.