Lập trình CSDL_02_Label Button Textbox

Bài trước: Lập trình CSDL_01_Tổng quan
-----

2.4 Label


Bài 3: Label


Sử dụng thuộc tính anchor để neo label theo các cạnh của form.

Phương thức Show() sẽ hiển thị form “được gọi” ngang hàng với form “gọi”, có thể cùng lúc thao tác trên hai form. Phương thức ShowDialog() chỉ cho người dùng thao tác trên form “được gọi”.

Muốn truy cập control từ form khác thiết lập thuộc tính Modifiers của control là Public.

Đoạn mã thêm một control bằng cách viết mã (không dùng kéo thả):

public Form1()
        {
            InitializeComponent();
            loadLabel();
        }

        void loadLabel()
        {
            Label lb = new Label();
            lb.Text = "Nhãn mới thêm";
            this.Controls.Add(lb);
            lb.BackColor = Color.Aqua;
        }

Một method mà không chỉ định kiểu truy cập (modifier) thì sẽ mặc định là private. Đọc thêm tại đây: https://stackoverflow.com/questions/2917495/method-without-access-modifier

2.5 Button


Bài 4: Button


Đổi màu một nút khi rê chuột, khi bấm, thiết lập trong thuộc tính FlatAppearance.

Để nút không đổi kích thước theo hình ảnh, thiết lập thuộc tính AutoSize là True.

Để xem đoạn mã của lớp cha, sử dụng phím F12.

Thiết lập hiển thị giữa hình nền và chữ của button, sử dụng thuộc tính TextImageRelation.

Đoạn mã: bấm vào một nút, tạo các nút mới có vị trí ngẫu nhiên nằm trong form, khi bấm vào nút vừa tạo sẽ xuất giá trị Text của button:

(ép kiểu tham số sender, thêm một phương thức cho một control: btn.Click += Btn_Click)

        int i = 0;
        void addButton()
        {
            Random rand = new Random();
            Button btn = new Button() {
                Text = i.ToString(),
                Location = new Point(rand.Next(0, this.Size.Width), rand.Next(0, this.Size.Height))
            };
            btn.Click += Btn_Click;
            this.Controls.Add(btn);
            i++;
        }

        private void Btn_Click(object sender, EventArgs e)
        {
            //ép sender về kiểu button
            Button btn = sender as Button;
            MessageBox.Show(btn.Text);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            addButton();
        }

2.6 TextBox


Bài 5: Textbox


Phân biệt hai thuộc tính enable và readonly của một textbox.

Thuộc tính tabindex để thiết lập thứ tự control sẽ được chọn (focus), giá trị nhỏ sẽ được chọn trước.

Đoạn mã sau sẽ cho nhập nội dung vào một textbox, bấm nút, xuất nội dung của textbox ra một label:

        private void button1_Click(object sender, EventArgs e)
        {
            lbValue.Text = txbValue.Text;
        }

Sử dụng thuộc tính Acceptbutton của form để thiết lập phím Enter, nhằm thực hiện chức năng của một button (gán phím Enter cho một nút).

Sử dụng thuộc tính Cancelbutton của form để thiết lập phím Esc, nhằm thực hiện chức năng của một button (gán phím Esc cho một nút).

Để xóa một dòng mã, sử dụng phím Ctrl + L.

Nhập một số vào textbox, tính bình phương, rồi xuất ra label:

private void button1_Click(object sender, EventArgs e)
        {
            int num = Convert.ToInt32(txbValue.Text);
            lbValue.Text = (num * num).ToString();
        }

Sử dụng TryParse để kiểm tra kiểu dữ liệu có phù hợp hay không:

private void button1_Click(object sender, EventArgs e)
        {
            int num = 0;
            if (Int32.TryParse(txbValue.Text, out num))
                lbValue.Text = (num * num).ToString();
            else
                lbValue.Text = "Vui lòng nhập số!";
        }

Sử dụng event TextChanged,

private void txbValue_TextChanged(object sender, EventArgs e)
        {
            int num = 0;
            if (Int32.TryParse(txbValue.Text, out num))
                lbValue.Text = (num * num).ToString();
            else
                lbValue.Text = "Vui lòng nhập số!";
        }

Lab 3. Làm một máy tính cầm tay (calculator) đơn giản.

1. Thiết kế form như sau,



– Khi chạy chương trình dấu nhắc (focus) sẽ nằm tại ô nhập liệu Nhập số 1. Khi người dùng bấm phím Tab trên bàn phím, thứ tự focus sẽ lần lượt là: Nhập số 2, +, -, *, /, Xóa, Kết Quả2. Mô tả chức năng:

– Ô Kết quả không cho nhập dữ liệu, chỉ để xuất kết quả, người dùng có thể chọn và copy kết quả

– Người dùng nhập hai giá trị số vào hai ô (Nhập số 1 và Nhập số 2), khi bấm các nút +, -, *, /, chương trình sẽ thực hiện phép toán tương ứng và xuất kết quả vào ô Kết quả

– Khi người dùng bấm nút Xóa, hoặc phím Esc (trên bàn phím) toàn bộ thông tin trong các ô nhập liệu sẽ được xóa, đặt focus vào ô Nhập số 1

– Khi người dùng bấm vào các phép toán cần kiểm tra để đảm bảo các đầu vào phải là các số. Với phép chia, cần kiểm tra để đảm bảo không có phép chia cho 0

– Nếu có lỗi nhập liệu đặt lại focus tại ô bị lỗi

----------------
Đoạn mã tham khảo:

namespace Calculator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCong_Click(object sender, EventArgs e)
        {
            double so1, so2;
            //so1 = Convert.ToDouble(txtSo1.Text);
            //so2 = Convert.ToDouble(txtSo2.Text);
            //txtKetQua.Text = (so1 + so2).ToString();
            if (Double.TryParse(txtSo1.Text, out so1) && Double.TryParse(txtSo2.Text, out so2))
                txtKetQua.Text = (so1 + so2).ToString();
            else if (!Double.TryParse(txtSo1.Text, out so1))
                txtSo1.Focus();
            else
                txtSo2.Focus();
        }

        private void btnTru_Click(object sender, EventArgs e)
        {
            double so1, so2;
            //so1 = Convert.ToDouble(txtSo1.Text);
            //so2 = Convert.ToDouble(txtSo2.Text);
            //txtKetQua.Text = (so1 - so2).ToString();
            if (Double.TryParse(txtSo1.Text, out so1) && Double.TryParse(txtSo2.Text, out so2))
                txtKetQua.Text = (so1 - so2).ToString();
            else if (!Double.TryParse(txtSo1.Text, out so1))
                txtSo1.Focus();
            else
                txtSo2.Focus();
        }

        private void btnNhan_Click(object sender, EventArgs e)
        {
            double so1, so2;
            //so1 = Convert.ToDouble(txtso1.Text);
            //so2 = Convert.ToDouble(txtSo2.Text);
            //txtKetQua.Text = (so1 * so2).ToString();
            if (Double.TryParse(txtSo1.Text, out so1) && Double.TryParse(txtSo2.Text, out so2))
                txtKetQua.Text = (so1 * so2).ToString();
            else if (!Double.TryParse(txtSo1.Text, out so1))
                txtSo1.Focus();
            else
                txtSo2.Focus();
        }

        private void btnChia_Click(object sender, EventArgs e)
        {
            double so1, so2;
            //so1 = Convert.ToDouble(txtso1.Text);
            //so2 = Convert.ToDouble(txtSo2.Text);
            //txtKetQua.Text = (so1 / so2).ToString();
            if (Double.TryParse(txtSo1.Text, out so1) && Double.TryParse(txtSo2.Text, out so2))
            {
                if (so2 > 0)
                    txtKetQua.Text = (so1 / so2).ToString();
                else
                    txtSo2.Focus();
            }
            else if (!Double.TryParse(txtSo1.Text, out so1))
                txtSo1.Focus();
            else
                txtSo2.Focus();
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            txtSo1.Clear();
            txtSo2.Clear();
            txtKetQua.Clear();
            txtSo1.Focus();
        }
    }
}

</////hết buổi 3

Câu hỏi 9. Properties của form hoặc control là gì?

Câu hỏi 10. Events của form hoặc control là gì?

Lab 4. Viết chương trình “cho biết bạn thuộc chòm sao nào, dựa vào ngày/tháng sinh”.

Với giao diện như sau:



Sau khi bấm vào nút “Lấy chòm sao”:



Yêu cầu chức năng:

– Đặt TabIndex cho các ô nhập liệu và các nút cho hợp lý

– Cho người dùng nhập ngày + tháng sinh

– Nếu ngày, tháng sinh hợp lệ, khi người dùng bấm vào nút “Lấy chòm sao!” thì hiển thị: hình, cung hoàng đạo (tên chòm sao) và ngày tháng của cung hoàng đạo đó

– Nếu người dùng nhập dữ liệu không hợp lệ thì đặt lại focus vào ô bị lỗi nhập liệu

– Nếu người dùng bấm vào nút “Xóa” hoặc phím Esc thì xóa hết dữ liệu trên giao diện

– Nếu người dùng bấm nút “Thoát” thì đóng chương trình

Danh sách các chòm sao:

– Chòm sao ARIES – DƯƠNG CƯU sinh từ ngày 21/3 – 20/4
– Chòm sao TAURUS – KIM NGƯU sinh từ ngày 21/4 – 21/5
– Chòm sao GEMINI – SONG TỬ sinh từ ngày 22/5 – 21/6
– Chòm sao CANCER – CỰ GIẢI sinh từ ngày 22/6-23/7
– Chòm sao LEO – HẢI SƯ sinh từ ngày 24/7 – 23/8
– Chòm sao VIRGO – XỬ NỬ sinh từ ngày 24/8 – 23/9
– Chòm sao LIBRA – THIÊN XỨNG sinh từ ngày 24/9 – 23/10
– Chòm sao SCORPIO – HỔ CÁP sinh từ ngày 24/10 – 22/11
– Chòm sao SAGITTARIUS – NHÂN MÃ sinh từ ngày 23/11 – 21/12
– Chòm sao CAPRICORNUS – MA KẾT sinh từ ngày 22/12 – 20/1
– Chòm sao AQUARIUS – BẢO BÌNH sinh từ ngày 21/1 – 19/2
– Chòm sao PISCES – SONG NGƯ sinh từ ngày 20/2 – 20/3

[Gợi ý]

– Để hiển thị hình ảnh: sử dụng control Picture Box

– Thuật toán:

Khi người dùng bấm nút “Lấy chòm sao”:

if (ngày và tháng đều là số)
{
            switch(tháng)
                        case (tháng 1)
                        if (ngày < 1 hoặc ngày > 31) > lỗi nhập dữ liệu
                        if (ngày <= 19) { lấy hình ảnh, tên chòm sao và thời gian để hiển thị }
                        if(ngày >= 20) { lấy hình ảnh, tên chòm sao và thời gian để hiển thị }
                        break;
                        case (tháng 2)
}
else // dữ liệu không phải là số
{
            Đặt lại focus tại ô bị lỗi nhập dữ liệu
}

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

private void btnThoat_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            txtNgay.Clear();
            txtThang.Clear();
        }

        private void btnChomSao_Click(object sender, EventArgs e)
        {
            int ngay, thang;

            if (Int32.TryParse(txtNgay.Text, out ngay) && Int32.TryParse(txtThang.Text, out thang))
            {
                switch (thang)
                {
                    case 1:
                        if (ngay < 1 || ngay > 31)
                            txtNgay.Focus();
                        else
                        {
                            if (ngay <= 20)
                            {
                                // tạo và chèn hình ảnh
                                PictureBox pic = new PictureBox
                                {
                                    Name = "pictureBox",
                                    Size = new Size(100, 85),
                                    Location = new Point(83, 245),
                                    ImageLocation = @"..\..\..\images\cung_ma_ket.jpg",
                                    SizeMode = PictureBoxSizeMode.CenterImage 
                                };
                                this.Controls.Add(pic);
                                // tạo nội dung văn bản

                                Label lbKetQua = new Label
                                {  
                                    Name = "labelKetQua",
                                    Location = new Point(186, 276),
                                    AutoSize = true,
                                    ForeColor = Color.Red,
                                    Font = new Font("Arial", 13, FontStyle.Italic),
                                    Text = "Cung ma kết (Capricornus-21/1 > 19/2)"
                                };
                                this.Controls.Add(lbKetQua);
                            }
                            if (ngay >= 20)
                            {

                            }
                        }
                        break;
                    default:
                        break;
                }
            }
            else
            {
                if (!Int32.TryParse(txtNgay.Text, out ngay))
                    txtNgay.Focus();
                if (!Int32.TryParse(txtThang.Text, out thang))
                    txtThang.Focus();
            }
        }

<///// hết buổi 4
-----
Tiếp theo: Lập trình CSDL_03_CheckBox MessageBox Panel RadioBox
Xem thêm: Danh sách các bài học