Xin hỏi cách làm ẩn, hiện các text box

Thảo luận trong 'Ứng dụng Access' bắt đầu bởi nguyentronguyen, 17 Tháng hai 2006.

11,814 lượt xem

  1. nguyentronguyen

    nguyentronguyen Thành viên sơ cấp

    Bài viết:
    19
    Đã được thích:
    0
    Tôi làm kế toán HCSN trên AC (không phải dân IT) xin hỏi các bạn cách giải quyết vấn đề sau:
    Tôi có một form nhập liệu gồm các text box như sau: TKNO, TKCO, MAVT(Mã vật tư, sản phẩm), DVT(Đơn vị tính), SLUONG (Số lượng), DGIA (Đơn giá), TTIEN(thành tiền). Những Text box khác không liên quan không giới thiệu thêm rối.
    Tôi muốn rằng: chỉ khi nào TKNO hoặc TKCO được nhập tài khoản là 152 hoặc 155 (nghiệp vụ nhập xuất) thì mới hiện các text box MAVT(Mã vật tư, sản phẩm), DVT(Đơn vị tính), SLUONG(Số lượng), DGIA(Đơn giá) còn bình thường thì nó phải ẩn đi để con trỏ khỏi nhảy vào đó khi nhập liệu nhằm tiết kiệm thời gian.

    (Lưu ý: Tôi muốn nhập liệu trên 1 form chứ không muốn mở thêm một Form khác vì khi nhập liệu lại phải chuyển form qua lại rất bất tiện).

    Xin trân trọng cảm ơn.
     
    Last edited: 17 Tháng hai 2006
    #1
  2. mysterious_girl

    mysterious_girl Thành viên sơ cấp

    Bài viết:
    358
    Đã được thích:
    1
    Nơi ở:
    ...close to you...
    Đầu tiên bạn cho các text box và label MAVT,DVT,SLUONG,DGIA ẩn. Bạn vào properties của từng text box chọn thẻ format-->visible-->No.

    Ở sự kiện afterupdate của TKNO hoac TKCO bạn làm như sau:

    Private Sub txttkno_afterupdate()
    If txttkno = "152" Or txttkno = "155" Then
    txtmavatu.Visible = True
    lblmavatu.Visible = True
    'Các textbox và label khác bạn gán tương tự nhé.
    Else
    txtmavatu.Visible = False
    End If
    End Sub
     
    Last edited: 17 Tháng hai 2006
    #2
  3. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Dear mysterious_girl
    -------------------
    Trả lời của mysterious_girl theo anh chỉ vừa thôi chứ chưa đủ, anh bổ sung thêm thế này!

    Dear nguyentronguyen,
    ----------------------
    Trong VBA nói riêng và trong ngôn ngữ lập trình Windows nói chung, hầu hết các đối tượng (Objects) và điều khiển (Controls) đều có các thuộc tính cơ bản như: tên, màu sắc, chiều rộng, chiều cao, font... trong đó có 2 thuộc tính quan trọng giúp cho người lập trình điều khiển cách thức thể hiện của chúng, đó là: Enable và Visible
    - Enable là thuộc tính làm vô hiệu hoá cách thức giao tiếp với người sử dụng. Nghĩa là người sử dụng có nhìn thấy điều khiển này (hơi mờ) khi thuộc tính này được thiết lập là FALSE
    - Khác với Enable, thuộc tính Visible sẽ không cho người sử dụng nhìn thấy điều khiển đó trên màn hình (tàng hình) nếu được thiết lập là FALSE.
    Dựa vào những đặc điểm này, bạn có thể nựa chọn cách điều khiển cho phù hợp với ứng dụng của bạn.
    Trở lại yêu cầu của bạn, nếu "Ở sự kiện afterupdate của TKNO hoac TKCO bạn làm như sau" (như mysterious_girl nêu) thì chưa đủ mà phải là . Theo tôi, hai sự kiện này cùng thực hiện một công việc như nhau, vì vậy ta nên viết một thủ tục dùng chung, đơn giản và gọn hơn một chút như sau, mạn phép sửa lại:
     
    Last edited: 17 Tháng hai 2006
    #3
  4. HongViet

    HongViet Thành viên thân thiết

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà nẵng
    Ms ACCESS Mờ - Tỏ:

    Nếu bạn TrongNguyen Không thích 'MỜ' mà thích sáng như ban ngày thì dùng tính chất TabStop: Khi đi khỏi Control Nợ & Có nếu nó đúng í ta thì gán thuộc tính TabStop là Yes( hay No) cho các Cotrols muốn con trỏ nhãy vô nhập liệu!
    Chúc vui vẽ & nhiều thành tựu!:two:
     
    #4
  5. nguyentronguyen

    nguyentronguyen Thành viên sơ cấp

    Bài viết:
    19
    Đã được thích:
    0
    Xin trân trọng cảm ơn tất cả các bạn
    Tôi đã làm theo và thành công.
    Sau này tôi còn tiếp tục nhờ các bạn nữa vì tôi không biết viết code.
     
    #5
  6. mysterious_girl

    mysterious_girl Thành viên sơ cấp

    Bài viết:
    358
    Đã được thích:
    1
    Nơi ở:
    ...close to you...
    Bạn ơi, ko biết thì có thể từ từ học mà. Tớ cũng ko biết nhiều.:biggrin:. Theo tớ thì bạn nên viết trước, có gì ko hiểu thì mới post lên hỏi,như vậy học được nhiều hơn là nhờ người khác viết hộ.
    Chúc bạn cuối tuần vui vẻ và hạnh phúc!
     
    #6
  7. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    :)
    ActiveX Control cũng là Object đấy nhé. Object là 1 từ mang tính chất General, còn ActiveX Control chỉ là 1 loại object thôi.

    Object có thuộc tính (properties) và phương thức (methods).

    Ví dụ: Đối tượng Ô tô: có thuộc tính là có 4 bánh, có vô lăng, có trục quay, v.v...; có methods: Run, v.v..

    :biggrin:
     
    #7
  8. nguyentronguyen

    nguyentronguyen Thành viên sơ cấp

    Bài viết:
    19
    Đã được thích:
    0
    Cảm ơn tất cả các bạn, tôi không hiểu khúc đầu đoạn code của bạn Cường nên tôi lấy phần code của bạn Mysterious girl ghép với đoạn cuối của Bạn Cường và chế tạo thêm một số công dụng nữa (Như vậy là chạy rất tốt).
    Theo ý của bạn Mysterious girl tôi in đoạn code này các bạn đừng cười nhé vì tôi không phải dân IT mà là dân kinh tế:

    Private Sub Me_AfterUpdate()
    If Combo104 = "152" Or Combo104 = "155" Or Combo106 = "152" Or Combo106 = "155" Or Combo106 = "511" Then
    Combo38.Visible = True
    Combo38_Label.Visible = True
    DVT.Visible = True
    Label70.Visible = True
    SLUONG.Visible = True
    Label44.Visible = True
    DGIA.Visible = True
    Label45.Visible = True

    Else
    Combo38.Visible = False
    DVT.Visible = False
    SLUONG.Visible = False
    DGIA.Visible = False
    End If

    If Combo104 = "661" Then
    MUC.Visible = True
    Label47.Visible = True
    TMUC.Visible = True
    Label48.Visible = True

    Else
    MUC.Visible = False
    TMUC.Visible = False
    End If

    If Combo106 = "111" Then
    Combo42.Visible = False
    Combo42_Label.Visible = False
    Else
    Combo42.Visible = True
    Combo42_Label.Visible = True
    End If

    If Combo104 = "111" Then
    Combo40.Visible = False
    Combo40_Label.Visible = False
    Else
    Combo40.Visible = True
    Combo40_Label.Visible = True
    End If

    End Sub

    Private Sub Combo104_AfterUpdate()
    Me_AfterUpdate
    End Sub

    Private Sub Combo106_AfterUpdate()
    Me_AfterUpdate
    End Sub

    Private Sub Combo40_AfterUpdate()
    If Combo40 > 0 Then
    'Chỗ này tôi không biết nên viết vậy, tức là combo40 có nhập liệu
    Label92.Visible = True
    Label86.Visible = True
    THUEKHOAN.Visible = True
    Label50.Visible = True
    NVLIEU.Visible = True
    Label89.Visible = True
    MMOC_TTBI.Visible = True
    Label90.Visible = True
    XDUNG_SCHUA.Visible = True
    Label91.Visible = True
    CHIKHAC.Visible = True

    Else
    Label92.Visible = False
    Label86.Visible = False
    THUEKHOAN.Visible = False
    Label50.Visible = False
    NVLIEU.Visible = False
    Label89.Visible = False
    MMOC_TTBI.Visible = False
    Label90.Visible = False
    XDUNG_SCHUA.Visible = False
    Label91.Visible = False
    CHIKHAC.Visible = False

    End If

    End Sub

    Vấn đề này tôi dốt lắm các bạn đừng cười nhé.
    Đoạn code trên nói rằng nếu TKNO hoặc TKCO thực hiện việc nhập xuất, hay thu sự nghiệp (vì cơ quan tôi hay thu sự nghiệp bằng sản phẩm có liên quan đến vật tư, hàng hóa) thì mới hiện các text box: mã vật tư, đơn vị tính, số lượng, đơn gía.
    Nếu chi hoạt động bộ máy (661) thì phải hiện text box: mục lục ngân sách Nhà nước bình thường thì ẩn.
    Nếu thu tiền mặt (111) thì không có text box mã đối tượng nợ
    Nếu chi tiền mặt (111) thì không có text box mã đối tượng có.
    Nếu chi dự án hay đề tài thì hiện các text box (các text box chi tiết): Thuê khoán, nguyên vật liệu, máy móc thiết bị, ... còn bình thường thì ẩn trốn.

    Tôi làm kế toán HCSN trên AC tự chế tạo chỉ nhập số liệu trên 1 table chính (khoảng mười mấy cột) và 3 table phụ là Tài khoản, Mã đối tượng và mục lục Ngân sách NN, có thế thôi mà cũng rối lắm, cứ lâu lâu nghĩ ra cái gì thì hoàn thiện thêm cái đó theo yêu cầu của những nhà khoa học hay của ngành dọc.
    Có một phần ở cái form nhập liệu mà rắc rối quá.
     
    Last edited: 20 Tháng hai 2006
    #8
  9. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Chắc chắn ko ai dám cười ai cả đâu. Bạn yên tâm.

    Tớ xin gợi ý với bạn 1 chút:
    - Nếu bạn dùng tên của cái combo104 một cách tượng minh hơn, giả sử như cboTaiKhoan thì code của bạn sẽ sáng sủa và dễ hiểu hơn rất nhiều.
    Tương tự như vậy: Labelxx, SLUONG, DGIA, v.v... --> lblSoLuong, txtSoLuong, txtDonGia, v.v...
    - Trong cái lệnh If nói, các hằng số kiểu như 152, 155,... nên quản lý theo phương pháp khác thì hay hơn. Giả sử có sự thay đổi nghiệp vụ và nó ảnh hưởng đến số Tài khoản thì bạn phải sửa phần mềm đấy.
    Vả lại, trong coding, cố gắng hạn chế viết trực tiếp các hằng số trong code mà nên "hằng số hóa" nó ra, ví dụ: cstTKVATTU = 152, v.v... thì khi bạn sửa bạn chỉ sửa ở mục khai báo hằng số thôi, code lúc đó cũng nhìn đẹp và dễ hiểu hơn rất nhiều.
    - Nên thay cái lệnh If = Select Case
    Ví dụ:
    strMATK = IIf(cboTaiKhoan.ListIndex <> - 1, cboTaiKhoan.List(cboTaiKhoan.ListIndex), vbNullString)
    Select Case strMATK
    Case cst..., cst...
    '//...
    Case cst..., cst...
    '//...
    Case else
    '//...
    End Select

    Regards,
     
    Last edited: 20 Tháng hai 2006
    #9
  10. nguyentronguyen

    nguyentronguyen Thành viên sơ cấp

    Bài viết:
    19
    Đã được thích:
    0
    Cảm ơn bạn Hai2hai, những vấn đề trên tớ chỉ hiểu một phần thôi ví dụ như đặt tên cho các text box, combo thì được chứ những vấn đề về khai báo biến, hay khó hơn thì chịu chết. Mình chỉ nhờ AC làm giúp những gì có trong nó thôi (những cái có sẵn), cao hơn là bảo nó cộng trừ nhân chia đơn giản thôi chứ phứng tạp như viết code thì thua. Có mấy cái function VND, Dloopkup hay cai macro axec gì đó cũng phải đi xin trên diễn đàn đấy. Tuy nhiên lâu lâu đọc sách, lên mạng lại thấy mở mang đầu óc ra một tí rồi lại vọc một tí.
    Một lần nữa xin cảm ơn bạn.
     
    #10

Chia sẻ trang này