Các bác giúp em cái code về option button (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

QuytFootball

Thành viên mới
Tham gia
21/8/21
Bài viết
18
Được thích
7
Em có dùng 2 option button trong bảng nhập liêu. Code bắt buộc 1 trong 2 phải được tick mới cho nhập liệu. Em cảm ơn ah

1630414843145.png
 
Em có dùng 2 option button trong bảng nhập liêu. Code bắt buộc 1 trong 2 phải được tick mới cho nhập liệu. Em cảm ơn ah

View attachment 265162

Ban thu với thủ tục dưới đây:
PHP:
Private Sub CommandButton1_Click()
    If Not OptionButton1.Value And Not OptionButton2.Value Then
        MsgBox "Ban phai chon mot trong hai Option!"
        Exit Sub
    End If
    ''Code cua ban.
End Sub
 
Upvote 0
Đoán là code sẽ như vậy

if op1.value=false and op2.value=false then
msgbox "chua chon tuy chon"
exit sub
endif
cảm ơn bạn nhé ^^!!!
Bài đã được tự động gộp:

Ban thu với thủ tục dưới đây:
PHP:
Private Sub CommandButton1_Click()
    If Not OptionButton1.Value And Not OptionButton2.Value Then
        MsgBox "Ban phai chon mot trong hai Option!"
        Exit Sub
    End If
    ''Code cua ban.
End Sub
Cảm ơn bro nhiều nhé !
 
Upvote 0
Tổng quát chỗ nào?

Hỏi bài thì ném mỗi cái hình lên. May là có anh đẹp trai kia rảnh làm sẵn cho thôi.

Còn hàng tổng quát thì phải gom các OptionButtons vào 1 frame (bí mật khủng khiếp, hay ho ở chỗ này) rồi khi UserForm bắt đầu mở lên để chọn mặc định 1 cái OptionButton mà mình ưa thích.
Vậy là xong.
 
Upvote 0
Tổng quát chỗ nào?

Hỏi bài thì ném mỗi cái hình lên. May là có anh đẹp trai kia rảnh làm sẵn cho thôi.

Còn hàng tổng quát thì phải gom các OptionButtons vào 1 frame (bí mật khủng khiếp, hay ho ở chỗ này) rồi khi UserForm bắt đầu mở lên để chọn mặc định 1 cái OptionButton mà mình ưa thích.
Vậy là xong.
Cái chỗ tô đỏ nghe nó kinh thiên động địa thế! Tùy theo lựa chọn nhiều lĩnh vực hay một lĩnh vực mà người ta dùng Frame hay không dùng thôi. Chứ chỉ 2 hoặc nhiều Option cho 1 lĩnh vực thì cần gì phải dùng Frame cho nặng file cơ chứ thằng em!

Mà với câu hỏi này, thậm chí không cần hình ảnh, không cần file người ta đọc vẫn hiểu code sẽ làm thế nào mà ta? Chẳng qua là khó khăn trong việc gọi tên của nó ra thôi, nếu vậy như anh chỉ đặt tên theo kiểu mặc định của nó là OK rồi, phải không?
 
Lần chỉnh sửa cuối:
Upvote 0
tổng quát thì phải gom các OptionButtons vào 1 frame (bí mật khủng khiếp, hay ho ở chỗ này)
Mình mới tiếp xúc code vài ngày gần đây thôi, chưa thực hiểu bản chất nên thấy code nào hay hơn thì nêu quan điểm cá nhân.

Mình rút kinh nghiệm vụ gửi file và cảm ơn góp ý của bạn nhé ><></
 
Lần chỉnh sửa cuối:
Upvote 0
Cái chỗ tô đỏ nghe nó kinh thiên động địa thế!
Em bắt chước kiểu dùng từ ngữ mạnh mẽ, đúng chuẩn SEO từ khóa để câu kéo ấy mà. Anh không thấy có mấy cái thớt có từ kiểu đó lên trang nhất GPE là gì. :D

chỉ 2 hoặc nhiều Option cho 1 lĩnh vực thì cần gì phải dùng Frame cho nặng file
Em trả lời theo đúng dạng tổng quát rồi còn gì anh. Nếu chỉ có vậy thì đó (Form đó) là 1 frame rồi.

Chẳng qua là khó khăn trong việc gọi tên của nó ra thôi, nếu vậy như anh chỉ đặt tên theo kiểu mặc định của nó là OK rồi, phải không?
Nếu họ nắm bắt được thì tốt quá rồi anh. :)

Cơ bản là có cái họ đã/đang làm thì sẽ có giải pháp phù hợp hơn, chưa kể được khuyến mại thêm vài cái hay ho khác mà anh. :p
90% vấn đề đưa ra là mới ở dạng ý tưởng, thực tế không làm theo phương án đó. Cụ thể bài của thớt đâu cần kiểm tra kiểu đó.
 
Upvote 0
Ngoài việc thiết lập trong UserForm_Initialize (run-time) bạn có thể thiết lập trong cửa sổ Properties (design-time): chọn 1 OptionButton nào đó làm mặc định, vd. OptionButton2 -> trong Properties thiết lập Value là True.

Nếu run-time thì
Mã:
Private Sub UserForm_Initialize()
    OptionButton2.Value = True
End Sub

opt1.jpg
 
Upvote 0
Ngoài việc thiết lập trong UserForm_Initialize (run-time) bạn có thể thiết lập trong cửa sổ Properties (design-time): chọn 1 OptionButton nào đó làm mặc định, vd. OptionButton2 -> trong Properties thiết lập Value là True.
Đúng như anh nói, đối với option button thì chẳng cần cốt kiết gì để phải ràng buộc chọn, tự cái thiết lập property cùng với bản chất của nó (chỉ cho phép chọn 1 trong n cái cùng nhóm) là đủ rồi. Ai phải viết code là thừa.
 
Upvote 0
Đúng như anh nói, đối với option button thì chẳng cần cốt kiết gì để phải ràng buộc chọn, tự cái thiết lập property cùng với bản chất của nó (chỉ cho phép chọn 1 trong n cái cùng nhóm) là đủ rồi. Ai phải viết code là thừa.
Và một cái nữa. Không có chuyện click, đúp chuột vào OptionButton đang được chọn để bỏ chọn nó. Cũng không thể click OptionButton đang được chọn rồi nói câu thần chú để bỏ chọn nó. Khi 1 OptionButton được chọn thì chỉ có thể bỏ chọn nó bằng cách chọn OptionButton khác. Tức nếu ở thời điểm "chào buổi sáng" có 1 OptionButton được chọn thì muôn đời luôn có 1 OptionButton được chọn. Không thể có thời điểm nào đó mà tất cả OptionButton đều không được chọn.
 
Upvote 0
Tùy theo chủ đề gì thì mình mới mặc định là để sẵn một OptionButton nó True thôi, chẳng hạn trắc nghiệm nè, bình chọn nè ai lại để nó True cái nào! Bản thân mình thì không bao giờ mặc định cho nó là True trước bởi vì phải để người nhập xác định rõ ràng, không vì một thao tác mà quên chú ý đến sự lựa chọn nhằm xác định chủ ý của mình. Giông như Install một cái app nó cũng không mặc định là Đồng ý và Không đồng ý (điều khoản), bạn phải chọn một trong hai nó mới cho Next.

P/s: Nếu chỉ 2 lựa chọn mà mặc định trước một cái thì thôi xài một cái CheckBox cho nó lành, chi phải tới 2 cái OptionButton cho phiền toái.
 
Upvote 0
Giông như Install một cái app nó cũng không mặc định là Đồng ý và Không đồng ý (điều khoản), bạn phải chọn một trong hai nó mới cho Next.
Em chắc chắn với anh nếu là OptionButton thì mặc định chọn rồi.
Nếu là checkbox mới không mặc định chọn.
 
Upvote 0
Em chắc chắn với anh nếu là OptionButton thì mặc định chọn rồi.
Nếu là checkbox mới không mặc định chọn.
Ừ thì cho dù có những trường hợp ngoại lệ (bởi vì mình cài đặt thường là nó để trống, buộc mình phải check vào), nhưng nếu chương trình do mình viết thì không bao giờ mình cho mặc định trước cái nào, để khỏi mắc công người nhập liệu lại quên và sau đó quay lại nói do app mặc định nên không chú ý, vậy thì mình bắt họ làm thêm một thao tác chọn để xác định việc nhập liệu này, sau khi nhập liệu xong thì mình lại cho cả 2 chưa chọn gì cả để tiếp tục nhập nghiệp vụ mới! Có như thế trách nhiệm của người nhập nó mới nâng cao lên được.
 
Upvote 0
chẳng hạn trắc nghiệm
xài một cái CheckBox cho nó lành
Trắc nghiệm và bình chọn là trường hợp khác: Cả 2 trường hợp trên đều có quyền để trống nhé! Không phải như chủ đề này bắt buộc phải chọn 1.
1. Khi viết code chấm điểm chẳng hạn, sẽ viết khác: Nếu tuỳ chọn 1 là đúng:
Mã:
If OptBt1 Then "1 diem" Else "0 diem"
Thì dù không chọn cái nào cũng chấm điểm được

2. Nếu là bầu chọn, thì sẽ viết code kết quả bầu chọn là:
Mã:
If OptBt1 Then a = a +1
If OptBt2 Then b = b +1
...
If OptBtn then n = n +1
Nếu tất cả không chọn tức là bỏ phiếu trắng. Thế thôi
 
Upvote 0
Trắc nghiệm là trường hợp khác: Cả 2 trường hợp trên đều có quyền để trống nhé! Không phải như chủ đề này bắt buộc phải chọn 1.
Tác gải yêu cầu:
Em có dùng 2 option button trong bảng nhập liêu. Code bắt buộc 1 trong 2 phải được tick mới cho nhập liệu. Em cảm ơn ah

View attachment 265162

Do mở rộng vấn đề là NÊN hoặc KHÔNG NÊN để một giá trị mặc định (chọn trước một tùy chọn) thì quan điểm của tôi là KHÔNG NÊN thế thôi.
 
Upvote 0
Tôi nói rất rõ là 2 trường hợp trắc nghiệm và bình chọn là có quyền để trống, và tôi gợi ý code cho 2 trường hợp đó. Còn trường hợp bắt buộc chọn 1 thì phải cẩn thận thôi. Viết cho người khác xài phải kèm hướng dẫn sử dụng, không làm theo ráng chịu. Chỉ khi có quyền để trống mới không để mặc định.
xài một cái CheckBox cho nó lành

Còn Checkbox chỉ dùng cho trường hợp yes/No (đối lập) chứ không dùng cho 2 tuỳ chọn với 2 nội dung không đối lập nhau.
 
Upvote 0
Tôi nói rất rõ là 2 trường hợp trắc nghiệm và bình chọn là có quyền để trống, và tôi gợi ý code cho 2 trường hợp đó. Còn trường hợp bắt buộc chọn 1 thì phải cẩn thận thôi. Viết cho người khác xài phải kèm hướng dẫn sử dụng, không làm theo ráng chịu. Chỉ khi có quyền để trống mới không để mặc định.


Còn Checkbox chỉ dùng cho trường hợp yes/No (đối lập) chứ không dùng cho 2 tuỳ chọn với 2 nội dung không đối lập nhau.
Ở đây cũng nói rất rõ là nếu ai đó nói phải để mặc định thì tôi cũng sẽ nói cũng có các trường hợp được để trống và do đây là việc mở rộng vấn đề mà chủ topic yêu cầu nên không ràng buộc việc có bắt buộc là phải chọn hay không chọn một trong nhiều cái OptionButton. OK?

Vấn đề CheckBox, thử đưa ra trường hợp nào mà 2 OptionButton (và chọn 1 là True) để tôi xử lý với 1 CheckBox đi, chứ nói không thì không được.
 
Lần chỉnh sửa cuối:
Upvote 0
Hi all bros, Cảm ơn anh em đã quan tâm và giúp đỡ nhé. Đúng là một vấn đề nhỏ thôi nhưng khi đi vào chi tiết sẽ thấy nhiều cái cần học hỏi chứ không phải đơn giản.

Mình làm cái userform cho đứa em mới ra trường quản lý 02 xe cuốc và vấn đề san lấp. Khi khởi chạy userfrom sẽ trống cả 2 op_buttons, nhưng mình muốn nó phải chọn xe trước khi đặt lịch nên mới hỏi về vấn đề này nên rất cảm ơn bro @Hoàng Trọng Nghĩa

Về quyền để trống của bro @ptm0412 , mình cũng cảm ơn vì có thể dùng cho 1 userform khác với thông tin có thể không khai báo
 
Upvote 0
Ở đây cũng nói rất rõ ...

Vấn đề CheckBox, thử đưa ra trường hợp nào mà 2 OptionButton (và chọn 1 là True) để tôi xử lý với 1 CheckBox đi, chứ nói không thì không được.
Tôi không muốn tranh luận hoặc cãi nhau: Nghĩa gợi ý 2 trường hợp "không bắt buộc chọn" và tôi gợi ý code khi "không bắt buộc chọn" nha! Đừng nghĩ xa quá rồi kiếm chuyện.
Còn trường hợp 2 tuỳ chọn không đối lập thì thiếu gì:
- Chọn hình tròn hay hình vuông (form tính diện tích) (nếu checkbox thì label là gì? nếu label là "hình tròn" thì khi không check không biết là hình thế nào)
- Chọn nhận quà hay nhận voucher (form đổi điểm) (nếu label của checkbox là "nhận quà" thì khi không check làm sao biết là sẽ nhận gì?)
- Chọn tách sheet hay tắt excel. Chọn label là gì?
 
Upvote 0
Tôi không muốn tranh luận hoặc cãi nhau: Nghĩa gợi ý 2 trường hợp "không bắt buộc chọn" và tôi gợi ý code khi "không bắt buộc chọn" nha! Đừng nghĩ xa quá rồi kiếm chuyện.
Còn trường hợp 2 tuỳ chọn không đối lập thì thiếu gì:
- Chọn hình tròn hay hình vuông (form tính diện tích) (nếu checkbox thì label là gì? nếu label là "hình tròn" thì khi không check không biết là hình thế nào)
- Chọn nhận quà hay nhận voucher (form đổi điểm) (nếu label của checkbox là "nhận quà" thì khi không check làm sao biết là sẽ nhận gì?)
- Chọn tách sheet hay tắt excel. Chọn label là gì?
Đơn giản thế mà ta????

1630488546959.png
 
Upvote 0
Không có Label, tự nhiên để nó trơ trụi thế này? Hiểu hông ta?

View attachment 265222
.............
Nhầm. Chủ thớt chỉ có 2 lựa chọn chứ không nhiều hơn. :D

Có thể dùng Label ngắn gọn vd. "Hãy lựa chọn". Dùng CheckBox thì phải giải thích, không đánh dấu thì nghĩa là gì (hoặc đánh dấu thì nghĩa là gì).
Với OptionButton thì người ta nhìn thấy ngay 2 lựa chọn là "vuông" và "tròn". Với CheckBox nếu Caption = "Hình vuông" thì người dùng hơi lúng túng khi không nhớ lựa chọn "kia" là gì.

Giải thích thì đượng nhiên dài dòng văn tự hơn.

Tất nhiên khi số lựa chọn > 2 (chọn 1 từ n, với n > 2) thì không thể dùng CheckBox. Còn OptionBiutton luôn dùng được.
 
Lần chỉnh sửa cuối:
Upvote 0
Có thể dùng Label ngắn gọn vd. "Hãy lựa chọn".
Nếu bỏ 2 option vào trong 1 frame, thì dùng ngay caption của frame để diễn giải "Chọn hình", lại còn gọn gàng và thẩm mỹ nữa.
Ngoài ra, nếu theo lập luận rằng
phải để người nhập xác định rõ ràng, không vì một thao tác mà quên chú ý đến sự lựa chọn nhằm xác định chủ ý của mình. #16
sau khi nhập liệu xong thì mình lại cho cả 2 chưa chọn gì cả để tiếp tục nhập nghiệp vụ mới #18

Thì khi dùng checkbox sẽ bị mặc dịnh là False ngay từ lúc mới vẽ lên. Nếu dạng Yes/No thì mặc định No, nếu là vuông tròn thì mặc định tròn. Code không can thiệp được.
 
Upvote 0
.............
Nhầm. Chủ thớt chỉ có 2 lựa chọn chứ không nhiều hơn. :D

Có thể dùng Label ngắn gọn vd. "Hãy lựa chọn". Dùng CheckBox thì phải giải thích, không đánh dấu thì nghĩa là gì (hoặc đánh dấu thì nghĩa là gì).
Với OptionButton thì người ta nhìn thấy ngay 2 lựa chọn là "vuông" và "tròn". Với CheckBox nếu Caption = "Hình vuông" thì người dùng hơi lúng túng khi không nhớ lựa chọn "kia" là gì.

Giải thích thì đượng nhiên dài dòng văn tự hơn.

Tất nhiên khi số lựa chọn > 2 (chọn 1 từ n, với n > 2) thì không thể dùng CheckBox. Còn OptionBiutton luôn dùng được.

Hàng nào công việc nấy. Mỗi control có lý do riêng của chúng. Đã là input thì dùng đại một control tổng quát như textbox cũng được, nhưng tất cả những điều kiện mà control khác tự có thì mình lại phải dùng code để làm. Vừa mệt vừa khó kiểm soát.

Căn bản, Option Button được sử dụng khi:
1. có 2 options trở lên, VÀ
2. chỉ được phép chọn 1 trong số options
Tất cả controls khác đều thiếu một hay cả hai tính chất này. Vì vậy:
- Nếu không cần một trong hai tính chất này thì có lẽ nên nghĩ đến control khác.
- Nếu cần cả hai tính chất này thì các controls khác sẽ bắt buộc phải dùng code để bù lắp. Code bù lắp sẽ rất khó bảo trì. Và đối với người quen UI thì sẽ khó hiểu. Điển hình, người ta quen theo luật dấu tròn là option button (một lựa chọn), dấu vuông là checkbox (0-n lựa chọn); bi giờ mình dùng checkbox thay option button thì người dùng sẽ chưng hửng.
 
Upvote 0
- Nếu cần cả hai tính chất này thì các controls khác sẽ bắt buộc phải dùng code để bù lắp. Code bù lắp sẽ rất khó bảo trì. Và đối với người quen UI thì sẽ khó hiểu. Điển hình, người ta quen theo luật dấu tròn là option button (một lựa chọn), dấu vuông là checkbox (0-n lựa chọn); bi giờ mình dùng checkbox thay option button thì người dùng sẽ chưng hửng.
Tôi thì thích cụm từ "bị bất ngờ". Tức đang quen "thế này", tự dưng bị gáo nước lạnh, phải mất một lúc định thần lại.

Thực ra chọn 1 trong "muôn vàn" là dấu hiệu nhận diện của OptionButton. Vì thế cho dù "muôn vàn" = 2 hay > 2 thì đều dùng OptionButton được. Nhưng chọn 1 trong "muôn vàn" không là dấu hiệu nhận diện của CheckBox nên nếu miễn cưỡng dùng CheckBox thì cũng chỉ dùng được khi "muôn vàn" = 2. Dùng được ở đây có cả ý nghĩa là người dùng không thể sơ ý hay cố tình chọn sao cho sảy ra tình huống là không chọn gì cả hoặc chọn hơn 1. Đã bắt chọn 1 trong "muôn vàn" thì muôn đời phải chọn 1 và chỉ chọn 1.
 
Upvote 0
Tôi thì thích cụm từ "bị bất ngờ". Tức đang quen "thế này", tự dưng bị gáo nước lạnh, phải mất một lúc định thần lại.
Tôi góp thêm 1 ý khi "muôn vàn" = 2:
Nếu 2 tuỳ chọn mang tính đối lập như Yes/No, đúng/ sai, có/ không, chịu/ ứ chịu, ... thì nên dùng checkbox, nếu 2 tuỳ chọn không mang tính trái ngược nhau (không đối lập nhau), thì nên dùng OptionButton.
 
Upvote 0
Tôi góp thêm 1 ý khi "muôn vàn" = 2:
Nếu 2 tuỳ chọn mang tính đối lập như Yes/No, đúng/ sai, có/ không, chịu/ ứ chịu, ... thì nên dùng checkbox, nếu 2 tuỳ chọn không mang tính trái ngược nhau (không đối lập nhau), thì nên dùng OptionButton.
Trường họp này thì dùng bao nhiêu CheckBox(es), 1 hay 2? và label chúng thế nào?
Cho một ví dụ có hình ảnh minh hoạ. Đặt CheckBox(es) và Option Buttons bên cạnh nhau xem cái nào dễ hiểu (đối với người dùng), dễ xài (dối với người phát triển) hơn?

Chú: năm 2000, lúc tôi được tiếp xúc những bài học đầu tiên với WebForm thì ví dụ điển hình tôi học cho Y/N là ... Radio buttons (tên cũ của Option Buttons)
 
Upvote 0
Trường họp này thì dùng bao nhiêu CheckBox(es), 1 hay 2? và label chúng thế nào?
Cho một ví dụ có hình ảnh minh hoạ. Đặt CheckBox(es) và Option Buttons bên cạnh nhau xem cái nào dễ hiểu (đối với người dùng), dễ xài (dối với người phát triển) hơn?
Theo tôi nếu chỉ có 2 trạng thái bật/tắt thì dùng CheckBox là đúng rồi. Dùng OptionButton sẽ gặp rắc rối.

- dùng CheckBox. Nếu muốn chọn thì click để đánh dấu, nếu không muốn chọn thì không click. Nếu click rồi mà nghĩ lại hoặc click do sơ ý thì luôn có thể click lần nữa để bỏ chọn. Tức với CheckBox thì có thể click rất nhiều lần để chuyển trạng thái bật / tắt.

- dùng OptionButton. Dĩ nhiên là nếu muốn chọn thì click, còn không muốn thì không click. Nhưng nếu click rồi sau đó muốn nghĩ lại hoặc sơ ý click thì sao? Không thể nào bỏ chọn được nữa. Với OptionButton thì nếu đã click thì muôn đời nó được chọn và không thể bỏ chọn như CheckBox được. Để khắc phục vấn đề này thì phải dùng 2 OptionButton là "Chọn con chó" và "Không chọn con chó". Nhưng như thế thì hơi không tự nhiên.

Nên nhớ rằng ta đang bàn về 2 TRẠNG THÁI bật / tắt, chọn / không chọn của chỉ duy nhất 1 ĐỐI TƯỢNG - hiện tượng, sự việc, con người, con vật. Khi có 2 ĐỐI TƯỢNG - hiện tượng, sự việc, con người, con vật, vd. chó và mèo thì có thể dùng 1 CheckBox với hàm ý bật là chọn chó (Caption = "Chó"), còn không bật, tức tắt là chọn mèo. Nhưng tôi vẫn thích 2 OptionButton với Caption = "Chó" và Caption = "Mèo" hơn.

Khi bàn tới 3 ĐỐI TƯỢNG - hiện tượng, sự việc, con người, con vật, vd. chó, mèo và chuột bạch, thì bắt buộc phải dùng OptionButton.

Trong những bài trước của mình tôi không nói về 2 TRẠNG THÁI bật tắt của 1 ĐỐI TƯỢNG - hiện tượng, sự việc, con người, con vật. Tôi nói về ĐỐI TƯỢNG: 2 đối tượng hoặc > 2 đối tượng.
 
Lần chỉnh sửa cuối:
Upvote 0
Trường họp này thì dùng bao nhiêu CheckBox(es), 1 hay 2? và label chúng thế nào?
Cho một ví dụ có hình ảnh minh hoạ. Đặt CheckBox(es) và Option Buttons bên cạnh nhau xem cái nào dễ hiểu (đối với người dùng), dễ xài (dối với người phát triển) hơn?

Chú: năm 2000, lúc tôi được tiếp xúc những bài học đầu tiên với WebForm thì ví dụ điển hình tôi học cho Y/N là ... Radio buttons (tên cũ của Option Buttons)
Đối với 2 tuỳ chọn đối nghịch như tôi đã thí dụ, thì chỉ cần 1 checkbox. Caption của nó là cái nào cũng được (1 trong 2 tuỳ chọn), vì người dùng hiểu ngay trái ngược đúng là sai, trái ngược sai là đúng; trái với có là không và ngược lại. Thí dụ trong việc tính diện tích:
- 2 option button để chọn hình tròn hoặc hình vuông, caption của chúng là "hình tròn" và "hình vuông"
- 1 checkbox có caption là "Có lỗ (tròn)". Check là có lỗ, không check thì không thể có ý nghĩa khác ngoại trừ nghĩa 'không có lỗ" (trong code khi check thì trừ ra khi tính diện tích, bỏ check là không trừ).
2 option button có thể đặt trong 1 frame và frame này có caption là "chọn hình", thay cho việc dùng label.

Ghi chú:
- Nếu 2 tuỳ chọn không đối lập như phải chọn giữa "có lỗ tròn" và "có lỗ lục giác" thì lại phải dùng option button chứ không dùng checkbox.
 
Lần chỉnh sửa cuối:
Upvote 0
Theo tôi nếu chỉ có 2 trạng thái bật/tắt thì dùng CheckBox là đúng rồi. Dùng OptionButton sẽ gặp rắc rối.
...
2 trạng thái (flip-flop/bistate) không phải là Options. Và vì vậy cái CheckBox gần với chuyện này hơn.
Tự tính chất CheckBox cũng có 2 trạng thái: ticked và không ticked.

Đối với 2 tuỳ chọn đối nghịch như tôi đã thí dụ, thì chỉ cần 1 checkbox. Caption của nó là cái nào cũng được (1 trong 2 tuỳ chọn), vì người dùng hiểu ngay trái ngược đúng là sai, trái ngược sai là đúng; trái với có là không và ngược lại.
Yes/No là chọn lựa.

Cũng như Nam/Nữ. Form có thể đưa ra một CheckBox labelled là Nam và người ta tự động hiểu không tick là Nữ? Tại sao lại không labelled Nữ và không tick là Nam?
Trong nghề thăm dò ý kiến (survey), dùng CheckBox thay thế Option Buttons là một kỹ xảo để bóp méo kết quả.
Lý do: option button bắt buộc người dùng phải xác định (chọn 1) hoặc không xác định (làm lơ hoặc bỏ sót). Dùng checkbox là cố tình 'hốt' cái kết quả đối. Nếu người dùng làm lơ hoặc bỏ sót thì sẽ được kết quả bên đối. Muốn lấy tổng kết gần sự thật một chút thì đặt cái checkbox chỗ dễ thấy. Muốn tổng theo ý mình thì đặt nó chỗ dễ bị sót.

(*1) trong Survey Form, khi lấy kết quả của Option Button loại không mặc định thì thực ra có thêm một trị 'không chọn'
Ví dụ có 2 buttons Nam/Nữ, kết quả download xuống thường là 1 trong 3 trạng thái: Nam, Nữ, và Trơn (not specified).
 
Upvote 0
Yes/No là chọn lựa.

Cũng như Nam/Nữ.
Nam/ Nữ về lý thuyết là sự đối nghịch giới tính. Sau này có thêm giới tính thứ 3, thứ 4, ... nhưng mọi văn bản in ra, mọi form được tạo ra để đánh dấu đều là checkbox với label là Nam, Check là Nam và không check là nữ. Trong phần mềm mà tôi thiết kế thì dùng combobx chọn, List là 1 list động ai muốn thêm gì thì thêm.
Cũng là lý thuyết, tôi cũng có quyền để caption của checkbox là "Nữ", check là nữ và không check là nam. Chẳng qua nó ngược với thói quen người dùng. Cũng như "có khoét lỗ" và "không khoét lỗ", thói quen check là có, không check là không.
Còn vụ kỹ xảo bóp méo thì tôi không bàn, vì do tính chất ngành nghề nó vậy. Không chỉ trong survey
 
Lần chỉnh sửa cuối:
Upvote 0
Cũng là lý thuyết, tôi cũng có quyền để caption của checkbox là "Nữ", check là nữ và không check là nam. Chẳng qua nó ngược với thói quen người dùng. Cũng như "có khoét lỗ" và "không khoét lỗ", thói quen check là có, không check là không.
Còn vụ kỹ xảo bóp méo thì tôi không bàn, vì do tính chất ngành nghề nó vậy. Không chỉ trong survey
Bỏ qua chuyện kỹ xảo. Tôi cốt ý nói: dùng CheckBox cho trường hợp 0/1 là buộc người dùng phải hiểu rằng "bạn không trả lời câu này đồng nghĩa với bạn chọn ..."
 
Upvote 0
"bạn không trả lời câu này đồng nghĩa với bạn chọn ..."
Trả lời/ không trả lời câu hỏi lại là đặc thù của 1 form dành riêng cho loại hình đặc thù nào đó. Form dùng tính toán hoặc dùng để nhập liệu thì người dùng phải cẩn thận. Để phòng xa thì như tôi đã nói: dùng combobox mặc định rỗng và ràng buộc not null.
TB: Chào mừng anh trở lại và viết bài. Thảo luận tranh luận với 1 vài anh chàng trong này chán quá.
 
Upvote 0
.... Để phòng xa thì như tôi đã nói: dùng combobox mặc định rỗng và ràng buộc not null.
Phòng vậy hơi xa quá. Theo kinh nghiệm thiết kế form của tôi thì combobox hơi mất thì giờ chọn. Gặp cái form dùng làm data entry thì người dùng gõ quen rồi sẽ nhớ hết các thứ tự từng control. Các controls đơn giản họ gõ lẹ lắm.
 
Upvote 0
Phòng vậy hơi xa quá. Theo kinh nghiệm thiết kế form của tôi thì combobox hơi mất thì giờ chọn. Gặp cái form dùng làm data entry thì người dùng gõ quen rồi sẽ nhớ hết các thứ tự từng control. Các controls đơn giản họ gõ lẹ lắm.
Khi tôi nhận bàn giao lúc mới nhận việc, tôi đã thấy 1 sự cẩu thả trong thiết kế dữ liệu: Cùng là thu chi mà tách ra 2 bảng Cash và bank cho 2 loại hình thanh toán tiền mặt và thanh toán bằng chuyển khoản qua ngân hàng. Việc đó chưa nghiêm trọng, vấn đề là tên fields 2 bảng khác nhau, đã vậy 1 bảng nó đặt 1 checkbox IsReceive và 1 bảng đặt 1 checkbox là IsPayment để phân biệt chứng từ thu/ chi. Người dùng cũng loạn mà người phải code để lập báo cáo dòng tiền (gộp 2 bảng lại) cũng bị loạn. Một số người đang viết code ầm ầm ở GPE đây không phân tích để thiết kế dữ liệu đến mức đó.
 
Upvote 0
Khi tôi nhận bàn giao lúc mới nhận việc, tôi đã thấy 1 sự cẩu thả trong thiết kế dữ liệu: Cùng là thu chi mà tách ra 2 bảng Cash và bank cho 2 loại hình thanh toán tiền mặt và thanh toán bằng chuyển khoản qua ngân hàng. Việc đó chưa nghiêm trọng, vấn đề là tên fields 2 bảng khác nhau, đã vậy 1 bảng nó đặt 1 checkbox IsReceive và 1 bảng đặt 1 checkbox là IsPayment để phân biệt chứng từ thu/ chi. Người dùng cũng loạn mà người phải code để lập báo cáo dòng tiền (gộp 2 bảng lại) cũng bị loạn. Một số người đang viết code ầm ầm ở GPE đây không phân tích để thiết kế dữ liệu đến mức đó.
Việc thiếu tính hệ thống và nhất quán khi thiết kế csdl hay lập trình là 1 tất yếu không loại trừ ai cả. Người ta chỉ nhận ra sai lầm khi đã quá muộn kể cả Microsoft. Thế mới có chuyện cứ mãi vá lỗi nhưng cứ sửa 1 lỗi thì lại ra 10 lỗi khác.

Tìm ra lỗi người khác thì rất dễ nhưng buộc mình không mắc lỗi như họ thì không dễ chút nào, nếu không muốn nói là không thể.
 
Upvote 0
Việc thiếu tính hệ thống và nhất quán khi thiết kế csdl hay lập trình là 1 tất yếu không loại trừ ai cả. Người ta chỉ nhận ra sai lầm khi đã quá muộn kể cả Microsoft. Thế mới có chuyện cứ mãi vá lỗi nhưng cứ sửa 1 lỗi thì lại ra 10 lỗi khác.

Tìm ra lỗi người khác thì rất dễ nhưng buộc mình không mắc lỗi như họ thì không dễ chút nào, nếu không muốn nói là không thể.
Biết nhiều 1 chút thì lỗi sẽ bớt đi 1 chút. Chỉ sợ không chịu học để biết thôi.
 
Upvote 0
2 trạng thái (flip-flop/bistate) không phải là Options. Và vì vậy cái CheckBox gần với chuyện này hơn.
Thì tôi viết rõ mà
Theo tôi nếu chỉ có 2 trạng thái bật/tắt thì dùng CheckBox là đúng rồi. Dùng OptionButton sẽ gặp rắc rối.

Rắc rối thôi chứ kiểu không có chó bắt mèo ăn cứt thì vẫn làm được:

1. Nếu chỉ 1 OptionButton thì tôi đã chỉ ra rắc rối rồi. Và rắc rối ở đây
- dùng OptionButton. Dĩ nhiên là nếu muốn chọn thì click, còn không muốn thì không click. Nhưng nếu click rồi sau đó muốn nghĩ lại hoặc sơ ý click thì sao? Không thể nào bỏ chọn được nữa. Với OptionButton thì nếu đã click thì muôn đời nó được chọn và không thể bỏ chọn như CheckBox được. Để khắc phục vấn đề này thì phải dùng 2 OptionButton

2. Dùng 2 OptionButton.
OptionButton1 -> Caption = Yes, "Chọn con chó"
OptionButton2 -> Caption = No, "Không chọn con chó"
Mặc định vd. OptionButton1.

Trong trường hợp này tôi cũng chỉ ra vấn đề ở đâu
Nhưng như thế thì hơi không tự nhiên.

Mỗi OptionButton cũng có 2 và chỉ 2 trạng thái thôi: True (đối tượng, sự việc,con người, con vật ĐƯỢC CHỌN) và False (đối tượng, sự việc,con người, con vật KHÔNG ĐƯỢC CHỌN). Cái khác chủ yếu giữa chúng là:

- việc lựa chọn hay không 1 CheckBox không ảnh hưởng tới việc lựa chọn hay không các CheckBox khác. Việc lựa chọn 1 OptionButton LUÔN LUÔN ảnh hưởng tới việc lựa chọn các OptionButton khác. Cụ thể là chọn OptionButton1 thì tất cả các OptionButton khác sẽ trở thành không được chọn.

- việc lựa chọn hay không một ChcekBox không phụ thuộc vào các CheckBox khác. Click CheckBox 1 lần thì nó được chọn, click lần 2 thì nó sẽ không được chọn. Với OptionButton luôn có thể click để chọn. Nhưng không thể click lần nữa hay nhiều lần nữa để bỏ chọn. Muốn bỏ chọn phải có ít nhất một OptionButton khác và chọn nó. Chính vì thế nếu ở trên dùng 1 OptionButton thì rắc rối. Còn nếu dùng 2 OptionButton thì không tự nhiên.

Thôi tôi nghỉ không tham gia chủ đề này nữa. Bởi có tham gia tiếp thì tôi cũng chỉ lặp lại những gì đã viết.
 
Lần chỉnh sửa cuối:
Upvote 0
Người ta chỉ nhận ra sai lầm khi đã quá muộn kể cả Microsoft. Thế mới có chuyện cứ mãi vá lỗi nhưng cứ sửa 1 lỗi thì lại ra 10 lỗi khác.
Cái này quá dễ hiểu. Vì Microsoft cũng chỉ là người chứ không là thánh. Con người có giỏi đến đâu thì cũng không biết mọi thứ trên đời được. Nếu Microsoft là THÁNH thì đã không phạm bất cứ lỗi nào, và làm gì có lỗi đầu tiên để mà Vá.
Không ai có thể lường hết mọi trường hợp sẽ có thể sảy ra, nhìn ra mọi chỗ yếu tiềm năng. Trừ phi là thánh.
 
Upvote 0
. . . . . . . .Không ai có thể lường hết mọi trường hợp sẽ có thể sảy ra, nhìn ra mọi chỗ yếu tiềm năng. Trừ phi là thánh.
Thêm nữa: Cái hay của con người là dễ nhìn thấy cái dỡ của người khác, nhóm khác hay hội khác; Nhưng không thể thấy nhiều cái dỡ của chính mình, của nhóm mình & nói rọng ra là của hội của mình.


Chúc mọi người chúng ta vui khỏe, vượt qua đợt dịch dã này!
 
Upvote 0
Thêm nữa: Cái hay của con người là dễ nhìn thấy cái dỡ của người khác, nhóm khác hay hội khác; Nhưng không thể thấy nhiều cái dỡ của chính mình, của nhóm mình & nói rọng ra là của hội của mình.
Nhìn thấy cọng cỏ trong mắt người khác nhưng không thấy được dầm trong mắt mình. :D
 
Upvote 0
Nhiều khi mình làm Form dùng Checkbox thay cho Label luôn, thấy cũng tiện (vd: nhập số hóa đơn, nếu có nhập thì đánh dấu vào Checkbox, không muốn nhập thì bỏ đánh dấu). Cứ mặc định tự hiểu là có đánh dấu là chọn, không đánh dấu là không chọn, không biết làm vậy người dùng khác có rối không nhưng thấy gọn cho form.
 

File đính kèm

  • Checkbox.JPG
    Checkbox.JPG
    31.9 KB · Đọc: 20
Upvote 0
Cái này quá dễ hiểu. Vì Microsoft cũng chỉ là người chứ không là thánh. Con người có giỏi đến đâu thì cũng không biết mọi thứ trên đời được. Nếu Microsoft là THÁNH thì đã không phạm bất cứ lỗi nào, và làm gì có lỗi đầu tiên để mà Vá.
Không ai có thể lường hết mọi trường hợp sẽ có thể sảy ra, nhìn ra mọi chỗ yếu tiềm năng. Trừ phi là thánh.
Cái bài #542 màb bác quote nó không nói rõ là lỗi ở controls hay lỗi của csdl.

Controls thì chưa hẳn đã là lỗi của Microsoft. Có thể họ phải theo tiêu chuẩn chung. Cũng có thể do phải hổ trợ các phiên bản cũ. Trường hợp phiên bản thì bên người viết code phải chịu khó tìm hiểu những phiên bản mới có thể có những cách thức khắc phục.

CSDL liên hệ thì đã có luật chuẩn (normalise) để giúp chúng làm việc. Theo lý thuyết CSDL LH thì nên chuẩn tối thiểu đến bậc 3. Trên thực tế, để tránh ảnh hưởng đến tốc độ, có nhiều CXSDL chỉ chuẩn đến bậc 2. Cũng như khi học thì lý thuyết nói về khoá ràng buộc bảng này bảng nọ. Trên thực tế, các CSDL lớn người ta thường 'hiểu ngầm' ràng buộc chứ không phải lúc nào cũng xác định trong metadata.

Phần mềm luôn phải trải qua tiến trình tiến hoá (evolution). Có nhiều điểm ta thấy không đúng nhưng thực ra ngày xưa nó là 'tối ưu'. Winform Controls của Microsoft ngày xưa bị bắt buộc phải tiến hoá theo chiều sì tin hiện đại là Webfrom (*1). Có nhiều điểm ta hỏi "tại sao Microsoft 'ngu' thế?", nhưng thực ra có thể do họ bị bó tay. Hàm Datedif trong Excel là một ví dụ điển hình. Khi mua lại bản quyền của Lotus 123 họ có thể bị ràng buộc bản quyền.

Cũng có những trường hợp do cần '"tối ưu" mặt này mà phải hy sinh mặt khác. Điển hình, để có được tỷ lệ não và chất xám trên trọng lượng cơ thể, con người phải chấp nhận cái sọ tròn to. Cộng với tật đứng trên hai chân khiến trọng lượng cả khối ốc nâng tuốt lên trên cao. Chạy thì không nhanh bằng loại 4 chân và khi ngã thì dễ vỡ sọ.
Nhưng bảo đổi lấy cái sọ nhỏ hơn cho dễ bảo quản thì bác có chịu không?

(*1) thì đúng như bác nói, không ai có thể luôn đoán đúng tương lai. Người giỏi chỉ có thể đoán đại khái thôi, chứ chi tiết thì phải chấp nhận khả năng đoán sai. Ngày xưa, chính
 
Upvote 0
Giải pháp ListBox thay cho CheckBox hoặc OptionButton:

1630738576163.png
 
Upvote 0
Cái bài #542 màb bác quote nó không nói rõ là lỗi ở controls hay lỗi của csdl.
À, tôi nói về lỗi chung chung thôi. Lỗi của phần mềm, lỗi của hệ điều hành, lỗi trong lập trình, lỗi trong công việc hàng ngày. Bất kể là lỗi gì, con người chứ không phải là thánh. :D
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom