Phần 1: Form và các Control thông dụng


Đây là các bài tập cơ bản hướng dẫn thiết kế Form và cách sử dụng các Control thông dụng trong Visual Studio để xây dựng ứng dụng WinForms. Ngoài ra chúng ta sẽ làm quen với cách lập trình sử dụng các thuộc tính, phương thức, sự kiện của Form và các Control.


Nội dung


Bài 1: Sử dụng Form và Button

Thiết kế Form có hai nút lệnh có tên là &Green và &Yellow. Form có nút Min, Max Button.

  • Khi click vào nút lệnh Green, Form đổi màu nền thành màu Xanh (Green) và đổi tiêu đề của Form thành “Green Colour”
  • Khi click vào nút lệnh Yellow, Form đổi màu nền thành màu Vàng (Yellow) và đổi tiêu đề của Form thành “Yellow Colour”.

Xem hướng dẫn


Bài 2: Sử dụng Form, TextBox và Button

Thiết kế Form có một TextBox để trắng, và 3 nút lệnh: Display, Clear, Exit.

  • Khi Click nút Display, hộp TextBox hiện lên câu: “Xin chào bạn đến với ngôn ngữ lập trình C#”
  • Click nút Clear, hộp TextBox bị xoá trắng
  • Click nút Exit để thoát khỏi chương trình.

Xem hướng dẫn


Bài 3: Sử dụng Form, TextBox, Label và Button

Thiết kế Form có một TextBox (có thể gõ nhiều dòng), một Label, 1 nút lệnh View, 1 nút lệnh Exit để thực hiện công việc sau:

  • Ban đầu, nút View bị mờ, khi bắt đầu ấn phím bất kì vào TextBox, nút View mới được kích hoạt.
  • Sau khi nhập vào ô TextBox, click nút View, Label sẽ hiển thị nội dung của TextBox
  • Click nút Exit để thoát khỏi chương trình.

Xem hướng dẫn


Bài 4: Sử dụng Form, Label, Groupbox và RadioButton

Thiết kế Form gồm 1 Label có dòng chữ “Thuộc tính MultiLine để làm gì?” và 4 RadioButton lần lượt có các tiêu đề sau: Chữ đậm, Chữ nghiêng, Xuống dòng, Chữ hoa. Các nút RadioButton được đặt trong một Groupbox có nhãn là “Trả lời”. Cuối cùng là một Label để hiển thị kết quả. Các công việc cần thực hiện:

  • Ban đầu Label hiển thị kết quả là rỗng.
  • Khi chọn RadioButton thứ 3, Label Kết quả hiển thị dòng chữ “Đúng”.
  • Khi chọn các RadioButton còn lại, Label Kết quả hiển thị dòng chữ “Sai”

Xem hướng dẫn


Bài 5: Sử dụng Form, Label, Groupbox và CheckBox

Thiết kế Form gồm 1 Groupbox có nhãn là “Chọn các ca sỹ VN bạn yêu thích”, chứa 5 CheckBox lần lượt có nhãn là: Mỹ Tâm, Mỹ Linh, Thanh Lam, Quang Dũng, Lam Trường, 1 nút lệnh “Xem” và một Label để hiển thị danh sách các ca sĩ bạn yêu thích. Các công việc cần thực hiện:

  • Nếu không chọn ca sĩ nào, Label sẽ hiện nội dung “Bạn không lựa chọn ca sĩ nào trong danh sách trên”.
  • Nếu có chọn, Label sẽ hiện nội dung: “Các ca sĩ mà bạn yêu thích là” <danh sách các ca sĩ>

Xem hướng dẫn


Bài 6: Sử dụng Form, TextBox và ListBox

Thiết kế Form gồm 1 ListBox và 1 TextBox. Khi Click vào các phần tử trong ListBox, TextBox sẽ hiển thị nội dung của các phần tử được chọn.

Xem hướng dẫn


Bài 7: Sử dụng Form, ListBox và Button

Thiết kế Form gồm có 2 ListBox, 2 Label và 4 nút lệnh có giao diện như sau:

  • Chọn các mặt hàng bên “Danh sách các mặt hàng”, khi Click vào nút >, sẽ chuyển các phần tử được lựa chọn sang bên “Các mặt hàng lựa chọn”, (đồng thời xoá đi các phần tử được lựa chọn bên “Danh sách các mặt hàng”)
  • Khi Click nút >> sẽ chuyển toàn bộ các phần tử bên “Danh sách các mặt hàng” sang bên “Các mặt hàng lựa chọn”, (đồng thời xoá trắng bên “Danh sách các mặt hàng”)
  • Chọn các mặt hàng bên “Các mặt hàng lựa chọn”, khi Click vào nút <, sẽ chuyển các phần tử được lựa chọn sang bên “Danh sách các mặt hàng”, (đồng thời xoá đi các phần tử được lựa chọn đó bên “Các mặt hàng lựa chọn”.
  • Khi Click nút << sẽ chuyển toàn bộ các phần tử bên “Các mặt hàng lựa chọn” sang bên “Danh sách các mặt hàng”, (đồng thời xoá trắng bên “Các mặt hàng lựa chọn”)
Thiết kế Form với ListBox

Thiết kế Form với ListBox

Xem hướng dẫn


Bài 8: Sử dụng Form, TextBox, ComboBox và Button

Thiết kế Form gồm có 1 TextBox điền Họ tên, 3 ComboBox có các Label đi kèm có nhãn: Ngày, Tháng, Năm

  • ComboBox Ngày nạp các giá trị từ 1 đến 31 (không cho nhập thêm dữ liệu)
  • ComboBox Tháng nạp các giá trị từ 1 đến 12 (không cho phép nhập thêm dữ liệu)
  • ComboBox Năm nạp các giá trị từ 1930 đến 2010 (cho phép nhập thêm dữ liệu)

Khi ấn nút lệnh Kiểm tra, nếu ngày tháng năm sinh là hợp lệ sẽ hiện ra MessageBox thông báo Họ tên và ngày sinh. Nếu dữ liệu ngày tháng không hợp lệ sẽ hiện ra MessageBox thông báo “Ngày sinh không hợp lệ!”

Xem hướng dẫn


Bài 9: Thiết kế chương trình Calculator đơn giản

Chương trình Calculator đơn giản

Chương trình Calculator đơn giản

  • Các hộp TextBox A+B, A*B, A-B, A/B không được phép sửa dữ liệu (Thuộc tính ReadOnly = True)
  • Sau khi nhập dữ liệu cho A và B, Nếu dữ liệu nhập đúng kiểu số, khi ấn nút Result sẽ tính kết quả để điền vào các TextBox A+B, A-B, A*B, A/B
  • Ấn nút Reset sẽ xoá trắng tất cả các TextBox, đưa Focus về TextBox A
  • Ấn nút Exit để thoát khỏi chương trình.
  • Lưu ý: Tạo TabIndex theo thứ tự: TextBox A, TextBox B, nút Result, nút Reset, nút Exit.

Bài 10: Thiết kế Form đăng nhập

Form đăng nhập

Form đăng nhập

Khi người sử dụng gõ UserName = “admin” và Password = “123” hoặc UserName = “user” và Password = “456” thì đóng Form đăng nhập và sẽ gọi sang Form thứ 2 có giao diện như sau:

Form Edit

Form Edit

  • Nếu UserName = “admin” thì hiển thị cả 2 GroupBox Style và Colour
  • Nếu UserName = “user”, chỉ hiển thị GroupBox Style, không hiển thị Groupbox Colour.
  • Các chức năng của Form Edit:
    • Khi chọn CheckBox Bold, chữ sẽ đậm, nếu bỏ chọn chữ sẽ bình thường. Tương tự với các CheckBox Italic (chữ nghiêng) và Underline (gạch dưới chân)
    • Khi click vào RadioButton Blue, chữ sẽ chuyển sang màu xanh, tương tự với Red và Grayed.

Tham khảo thêm

Có thể bạn sẽ thích…

27 phản hồi

  1. Tim Oday viết:

    Bài tập số 5 thay vì viết từng câu lệnh If kiểm tra các CheckBox, chúng ta có thể dùng vòng lặp duyệt qua các CheckBox trong groupbox1, ví dụ:

    
    foreach (CheckBox chk in groupBox1.Controls)
                {
                    if (chk.Checked)
                        strKetQua += chk.Text + ", ";
                }
    
    
  2. Tim Oday viết:

    Bài tập 4 gặp vấn đề khi khởi động Form, tự động nó chọn vào 1 RadioButton nên nó hiển thị luôn kết quả.
    Cách giải quyết, chọn control RadioButton, trong cửa sổ Properties thay đổi thuộc tính

    AutoCheck = false;

    của các RadioButton. Sau đó mở code thêm dòng

    nameRadioButton.AutoCheck = true;

    vào sau

    InitializeComponent();
  3. Tim Oday viết:

    Bài tập 4 cũng có thể cài thiện code vì phần xử lý của các RadioButton là tương tự nhau, nên ta có thể gộp chung vào một phương thức, ví dụ:

    void CheckChanged(object sender, EventArgs e)
            {
                RadioButton rbt = sender as RadioButton;
                if (rbt.Checked)
                {
                    if(rbt == rbtXuongDong)
                        lblKetQua.Text ="Đúng";
                    else
                        lblKetQua.Text = "Sai";
                }
            }

    Sau đó viết thêm vào sau Phương thức

    InitializeComponent()

    câu lệnh sau:

    rbtChuDam.CheckedChanged += CheckChanged;
    rbtChuNghieng.CheckedChanged += CheckChanged;
    rbtXuongDong.CheckedChanged += CheckChanged;
    rbtChuHoa.CheckedChanged += CheckChanged;
  4. quan viết:

    thầy ơi . ở bài 3 đấy, cái phần if else em muốn thêm thuộc tính khi mà viết chữ thì màu nền đổi sang màu khác còn khi không có chữ thì màu nền lại về màu trắng. sao e viết thế này không đk. thầy chỉ em với.em đang học môn này cảu thầy ạ.

    if (txtHienthi.Text.Trim() != "")
                    bttView.Enabled = true;
                    txtHienthi.BackColor= Color.Pink;
                else
                {
                    bttView.Enabled = false;
                    txtHienthi.BackColor= Color.White;
                }
    • Phan Tiến viết:

      Em chú ý,
      Phần câu lệnh If else nếu sau đó là một khối lệnh thì em phải đặt trong dấu {} giống như em học Pascal, sau phần If có một khối lệnh thì phải bắt đầu bằng begin … end;
      Code sẽ phải sửa lại:

      if (txtHienthi.Text.Trim() != "")
      {
      bttView.Enabled = true;
      txtHienthi.BackColor= Color.Pink;
      }
      else
      {
      bttView.Enabled = false;
      txtHienthi.BackColor= Color.White;
      }
  5. huế viết:

    thầy ơi em muốn tạo một giao diện chính sau đó em kích vào các nút thì nó hiện ra các giao diện con thì làm thế nào ạ

  6. Sơn viết:

    Thầy ơi câu hỏi hơi khó hiểu nhưng thầy giúp e với ạ
    e có 1 combobox đổ dữ liệu từ CSDL ra combobox.ValueMember = “MaPB” combobox.DisplayMember=”TenPB”
    e lấy dữ liệu từ CSDL thông qua datagridview bằng sự kiện cell_click
    thì e lấy đc combobox.ValueMember còn combobox.DisplayMember thì làm như nào để nó hiện lên ạ

  7. hathihue591858 viết:

    thầy ơi đề tài của em gồm hai đối tượng là quản lý và nhân viên. bây giờ em muốn phân quền cho quản lý làm được hết các quyền còn nhân viên thì hạn chế các chức năng được xem. thì em phải làm thế nào ạ.

    • Phan Tiến viết:

      Em sẽ kiểm tra user đó có quyền gì, rồi dùng thuộc tính Enable hoặc Visible của các control để cho người sử dụng truy cập các chức năng đó.
      Ví dụ User1 chỉ có quyền xem, không có quyền thêm mới chẳng hạn thì vô hiệu hoá nút thêm mới đi, giả sử nút đó là btnThemMoi.Enabled = false;

  8. Dung viết:

    thầy ơi em làm form đăng nhập xong nhưng muốn liên kết với form chính thì làm như thế nào ạ

    • Phan Tiến viết:

      Em có thể thiết kế một form cha (ứng dụng MDI), thiết kế các menu trong đó có menu bật form đăng nhập. Em xem bài tập phần 2 về thiết kế ứng dụng MDI.

      • Dung viết:

        thưa thầy em muốn vào hệ thống thì cái form đăng nhập hiện lên đầu tiên sau đó là form chương trình chính mà e đã đặt chương trình chính là form cha rồi ạ,em viết form đăng nhập riêng liệu có cách nào liên kết 2 form với nhau k ạ

        • Phan Tiến viết:

          Liên kết được chứ em nhưng mình chưa hiểu em định liên kết những cái gì của 2 form. Em dùng phương thức Show() hoặc ShowDialog() để hiển thị một form khác thôi mà. Dùng phương thức Hide() để ẩn một form nào đó. Em xem thêm câu trả lời mình đã trả lời bạn hà huế nhé.
          Chú ý: Thường form đăng nhập có 2 nút OK và Cancel, khi kích nút OK thì em phải kiểm tra người dùng này có hợp lệ không và tra về kết quả qua DialogResult. Khi Form đăng nhập thành công thì bật form chính lên.

  9. hà huế viết:

    Đăng nhập–>from chính–>from con ntn thì from cha là cái nào vậy ạ. e muốn khi vào chương chình thì from đăng nhập hiện lên đầu tiên ạ.

    • Phan Tiến viết:

      form cha vẫn là form MDI đó em, là form chứa giao diện của toàn bộ ứng dụng.
      Để làm như em muốn. Ban đầu em cho form Đăng nhập chạy đầu tiền (chọn phương thức ShowDialog()) -> nếu tên đăng nhập và mật khẩu hợp lệ thì mở form chính và ẩn form Đăng nhập (dùng phương thức Hide()). Các form con sẽ hiển thị trong form chính.

  10. nguyenthituoi viết:


    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\SV\QLBH\QLBH\QLBS.mdf;Integrated Security=True;User Instance=True");
    SqlDataAdapter sda = new SqlDataAdapter("Select count(*)from tblDangNhap where MaNV='" + txtTenDangNhap.Text + "'and Pass='" + txtMatKhau.Text + "'", con);
    DataTable dt = new DataTable();
    sda.Fill(dt);

    /*string sql="Select *from tblDangNhap where MaNV='" + txtTenDangNhap.Text + "'and Pass='" + txtMatKhau.Text + "'";
    SqlCommand cmd = new SqlCommand(sql);
    SqlDataReader dta = cmd.ExecuteReader();
    if (dta.Read() == true)
    {
    this.Hide();
    frmQLBSach ss = new frmQLBSach();
    ss.Show();
    }*/
    if (dt.Rows[0][0].ToString() == "1")
    {
    this.Hide();
    frmQLBSach ss = new frmQLBSach();
    ss.Show();
    }
    else
    {
    MessageBox.Show(" Có lỗi vui lòng kiểm tra lại tên đăng nhập hoặc mật khâu!");
    }

    thầy ơi em nhập vào đúng mật khẩu pass nhưng nó luôn thực hiện câu lệnh ở phần else e k biết lỗi ở đâu ạ thầy kiểm tra giúp e vs

    • Phan Tiến viết:

      Câu lệnh Sql của em bị sai, em thiếu khoảng trắng, em xem câu lệnh của mình
      Select count(*) from tblDangNhap where MaNV='” + txtTenDangNhap.Text + “‘ and Pass='” + txtMatKhau.Text + “‘”
      Em MessageBox để show lên giá trị trong dt.Rows[0][0].ToString()
      Để đơn giản em có thể sử dụng trực tiếp phương thức ExceuteScalar() rồi so sánh giá trị

  11. nguyenthituoi viết:

    SqlDataAdapter sda = new SqlDataAdapter(” Select Count(*) From tblDangNhap Where MaNV= ‘ ” + txtTenDangNhap.Text + ” ‘ and Pass= ‘ ” + txtMatKhau.Text + ” ‘ ” , con);
    em sửa ntn đã được chưa ạ

  12. nguyenthituoi viết:

    thầy ơi nó vẫn báo lỗi như vậy ạ,thây xem giúp em sai chỗ nào với ạ

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;

    namespace BaiTapLon
    {
    public partial class frmDangNhap : Form
    {
    public frmDangNhap()
    {
    InitializeComponent();
    }

    private void btnOK_Click(object sender, EventArgs e)
    {
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\SV\QLBH\QLBH\QLBS.mdf;Integrated Security=True;User Instance=True");
    SqlDataAdapter sda = new SqlDataAdapter("Select count(*) from tblDangNhap where MaNV='" + txtTenDangNhap.Text + "' and Pass='" + txtMatKhau.Text + "'" , con);
    DataTable dt = new DataTable();
    sda.Fill(dt);
    if (dt.Rows[0][0].ToString() == "1")
    {
    this.Hide();
    frmQLBSach ss = new frmQLBSach();
    ss.Show();
    }
    else
    {
    MessageBox.Show(" Có lỗi vui lòng kiểm tra lại tên đăng nhập hoặc mật khâu!");
    }
    }

    private void btnThoat_Click(object sender, EventArgs e)
    {
    this.Close();
    }
    }
    }

    • Phan Tiến viết:

      Em thử MessageBox.Show(dt.Rows[0][0].ToString()) xem giá trị nó là cái gì. Em nên tập Debug bằng cách ấn F9 vào dòng mà em muốn Debug, rồi chạy từng dòng lênh.

  13. Duy Nhật viết:

    Thầy ơi cho em hỏi?, Em làm mờ 1 button Lưu khi bắt đầu mở Form, sau đó em cho bấm Sửa thì Lưu hiện, nhưng khi nhấn Lưu lại, em muốn Lưu mờ lại thì bị lỗi luu.enabled.false, em cám ơn thầy

Bình luận

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *