Lập trình CSDL_03_CheckBox MessageBox Panel RadioBox

Bài trước: Lập trình CSDL_02_Label Button Textbox
-----
Câu hỏi 11. Thuộc tính anchor dùng để làm gì?

Câu hỏi 12. Thuộc tính Modifiers dùng để làm gì?

Câu hỏi 13. Phân biệt phương thức Show() và ShowDialog()?

2.7 CheckBox


Bài 6. CheckBox


Checkalign để thay đổi vị trí của ô check so với phần chữ

Checked: 2 trạng thái (checked, unchecked)

CheckState: 3 trạng thái (checked, unchecked, indeterminate). Cần thiết lập thuộc tính ThreeState là True. Trạng thái checked và indeterminate đều trả về giá trị True, unchecked trả về giá trị False.

Vậy, ngoài khác biệt về số trạng thái (2 và 3), thì Checked và CheckState còn khác nhau điều gì? Chúng khác nhau ở hai sự kiện là CheckedChanged và CheckStateChanged. Ví dụ,

        private void checkBox1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Clicked");
        }
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            MessageBox.Show("CheckedChanged");
        }
       private void checkBox1_CheckStateChanged(object sender, EventArgs e)
        {
            MessageBox.Show("CheckStateChanged");
        }

Lab 5. Chương trình ví dụ sử dụng checkbox

[Giao diện]



[Mô tả chức năng]

– Khi người dùng bấm vào nút Gửi ý kiến: lấy “tên” và ý kiến của người dùng, xuất ra một MessageBox

[Đoạn mã tham khảo]

        private void btnGui_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            string haiLong = chkHaiLong.CheckState == CheckState.Checked ? "hài lòng" : chkHaiLong.CheckState == CheckState.Unchecked ? "không hài lòng" : "phân vân";
            string strShow = string.Format("Bạn {0} cảm thấy {1} về dịch vụ!", name, haiLong);
            MessageBox.Show(strShow);
        }

Để ý cách sử dụng hàm string.Format("abcdef {0} ghijk {1} mnop!", noiDung0,  noiDung1). Nội dung của biến noiDung0 sẽ được chèn vào {0}, nội dung của biến noiDung1 sẽ được chèn vào {1}.

2.8 MessageBox


Bài 7. MessageBox


MessageBox không phải là một control mà là một lớp hỗ trợ.

Tại một thời điểm, chỉ có một MessageBox được xuất hiện trên giao diện.

Để thêm tiêu đề cho cửa sổ MessageBox, sử dụng tham số caption, ví dụ:

MessageBox.Show("Nội dung thông báo", "Nội dung của thanh tiêu đề (caption)");
MessageBox.Show("Bạn chưa nhập dữ liệu!", "Thông báo");

Để tùy chỉnh các nút cho cửa sổ MessageBox, sử dụng tham số MessageBoxButton, ví dụ:

MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel);

Để thêm biểu tượng (icon) cho cửa sổ MessageBox, sử dụng tham số MessageBoxIcon, ví dụ:

MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

Để thiết lập nút được chọn mặc định (focus) cho cửa sổ MessageBox, sử dụng tham số MessageBoxDefaultButton, ví dụ:

MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);

Có thể nhận kết quả trả về của cửa sổ MessageBox, để sử dụng cho các xử lý khác, ví dụ:

DialogResult result = MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);
            if ( result == System.Windows.Forms.DialogResult.Yes )
            {
                MessageBox.Show("Người dùng vừa bấm nút Yes");
            }

Thực hiện Insert Snippets cho lệnh switch (Với các lệnh khác cách làm tương tự, chỉ cần thay tên lệnh), cách làm như sau:

– Để dấu nháy chuột ở chỗ cần chèn lệnh switch,

– Sử dụng tổ hợp phím tắt Ctrl+K, + X

– Chọn Visual C#

– Chọn switch

– Thay chữ switch_on bằng tên biến (result)

– Gõ phím Enter 2 lần

2.9 Panel và FlowLayoutPanel


Bài 8. Panel và FlowLayoutPanel


Panel là một control dùng để chứa (gom nhóm) các control khác, giúp thuận lợi trong việc thiết kế và xử lý.

Thêm một control và panel,

Button btn = new Button();
            btn.Text = "New Button";
            pnlTest.Controls.Add(btn);

Sử dụng FlowLayoutPanel để sắp xếp các control trong nó có thứ tự.

2.10 RadioButton


Bài 9. RadioButton


RadioButton dùng để chọn một mục trong một nhóm các mục chọn. Để tạo ra một nhóm các mục chọn, sử dụng control Panel.

Với RadioButton, kĩ năng cơ bản nhất cần nắm là: cách duyệt các radio trong một panel, để biết được người dùng đã chọn radio nào.

Để gỡ bỏ chế độ chọn (checked) mặc định cho một radio, thiết lập thuộc tính Tabstop là false.

Để khóa các radio trong một panel, thiết lập thuộc tính Enable là false.

Để duyệt các radio trong một panel sử dụng cú pháp sau:

            RadioButton rb = null;
            // duyệt panel Câu hỏi 1
            foreach(RadioButton item in pnlCauHoi1.Controls)
            {
                if(item.Checked)
                {
                    rb = item;
                }
            }

Lab 6. Tạo một chương trình trắc nghiệm đơn giản

[Giao diện khi chạy chương trình – GiaoDien1]



[Giao diện sau khi người dùng đã làm bài và bấm nút Nộp bài – GiaoDien2]



[Xác nhận chắc chắn nộp bài từ người dùng – GiaoDien3]



[Mô tả chức năng]

– Chương trình cho phép người dùng chọn 01 câu trả lời cho từng câu hỏi, không nhất thiết phải làm hết các câu hỏi, có thể không trả lời câu nào cũng được

­– Nếu người dùng chưa bấm nút “Nộp bài” thì nút “Thoát” bị vô hiệu, để đảm bảo người dùng phải nộp bài mới được đóng chương trình

– Sau khi người dùng bấm nút Nộp bài thì:

  + Hiển thị cửa sổ thông báo như GiaoDien3

  + Nếu người dùng bấm Cancel thì cho tiếp tục làm bài

  + Nếu người dùng xác nhận (OK) thì thực hiện các bước sau:

    ++ Nếu họ không trả lời câu hỏi nào, thì xuất câu thông báo “Bạn chưa làm bài!”

    ++ Ngược lại, xuất kết quả như trong GiaoDien2

    ++ Vô hiệu (khóa) nút “Nộp bài”, khóa các mục chọn như trong GiaoDien2

    ++ Mở nút “Thoát” để người dùng có thể đóng chương trình

[Gợi ý cách làm]

– Khi khởi tạo form sẽ khóa nút btnThoat

– Khi người dùng bấm nút btnNopBai

{
       Khai báo các biến
       string kq = null; // để chứa chuỗi kết quả
       RadioButton rb = null; // để chứa nút người dùng đã chọn
       int flagXuat = 0; // để kiểm tra khi nào thì xuất dòng thông báo “Bạn chưa làm bài”, khi nào thì xuất kết quả chọn của mỗi câu
       Kiểm tra kết quả trả về của GiaoDien3, nếu Cancel thì không làm gì, nếu là OK thì: duyệt qua từng panel, kiểm tra xem nút radio nào được chọn (checked), lấy Tên câu hỏi nối vào chuỗi kq, lấy phần Text của nút được chọn nối vào chuỗi kq, nối thêm kí tự xuống hàng “\r\n”
       Xuất kq vào txtKetQua
}

<///// hết buổi 5
-----
Tiếp theo: Lập trình UD Desktop_04_ComboBox DataBinding
Xem thêm: Danh sách các bài học