Các sự kiện của textbox trong C#

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về sự kiện TextChanged của TextBox trong C# Winforms. Đây là một sự kiện được sử dụng rất nhiều, hầu hết đều có trong các ứng dụng winforms.

Các sự kiện của textbox trong C#

Các sự kiện của textbox trong C#

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Mình sẽ hướng dẫn các bạn cách tạo và xử lý sự kiện TextChanged của TextBox trong C# Winforms, cùng với đó là một ví dụ để các bạn có thể tham khảo.

1. Sự kiện TextChanged là gì?

TextChanged là một sự kiện, xảy ra khi nội dung trong ô TextBox được thay đổi.

Ví dụ khi chúng ta muốn tìm kiếm một danh sách các học sinh theo tên. Khi đó ta sử dụng sự kiện TextChanged để xử lý khi người dùng nhập vào tên cần tìm trong TextBox, các tên trùng với tên trong TextBox sẽ được hiện ra.

Bài viết này được đăng tại [free tuts .net]

2. Cách tạo sự kiện TextChanged của TextBox trong C# Winforms

Để tạo được sử kiện TextChanged, việc đầu tiên chúng ta cần thêm vào Form một vài TextBox. Lưu ý nhớ đặt tên cho TextBox để tiện cho việc sử dụng nó sau này nhé.

Các sự kiện của textbox trong C#

Sau khi đã thêm các TextBox vào Form và đặt tên cho nó. Bây giờ chúng ta cần tạo sự kiện TextChanged cho TextBox bằng hai cách sau:

Cách 1: Tạo sự kiện TextChanged bằng cách chuột phải vào TextBox sau đó chọn Properties, nhấn vào biểu tượng sấm set rồi đặt tên cho sự kiện TextChanged.

Các sự kiện của textbox trong C#

Cách 2: Ngoài ra còn có thể nhấn đúp chuột trái vào TextBox, khi đó hệ thống sẽ tạo sự kiên TextChanged và đưa tới cửa sổ viết code.

3. Xử lý sự kiện TextChanged của TextBox trong C# Winforms

Bây giờ chúng ta sẽ bắt đầu xử lý cho sự kiện TextChanged của TextBox vừa được tạo ở trên.

Giả sử mình có một bài toán như sau: khi người dùng nhập nội dung vào TextBox 1 thì nội dung ở TextBox 2 sẽ bị xóa đi hết. Ngược lại khi nội dung ở TextBox 1 bị xóa hết đi thì TextBox 2 sẽ hiển thị nội dung "Hello, I'm Freetuts !!!".

Để làm được điều này ta cần xử lý sự kiện TextChanged trên TextBox 1. Sử dụng if else để tạo điều kiện cho TextBox.

if(txtTextBox1.Text == "")
{
       txtTextBox2.Text = "Hello, I'm Freetuts !!!";
}

Nếu TextBox 1 trống thì ta hiển thị nội dung "Hello, I'm Freetuts !!!" ở TextBox 2.

else
{
        txtTextBox2.Text = "";
}

Ngược lại nếu TextBox 1 có nội dung thì ta sẽ xóa tất cả nội dung có trong TextBox 2.

Kết quả: Khi người dùng nhập nội dung vào TextBox 1 thì TextBox hai sẽ trống, ngược lại người dùng xóa nội dung ở TextBox 2 thì TextBox 2 sẽ hiển thị nội dung.

Các sự kiện của textbox trong C#
Các sự kiện của textbox trong C#

4. Code hoàn chỉnh

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

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


        private void txtTextBox1_TextChanged(object sender, EventArgs e)
        {
            if(txtTextBox1.Text == "")
            {
                txtTextBox2.Text = "Hello, I'm Freetuts !!!";
            }
            else
            {
                txtTextBox2.Text = "";
            }
        }
    }
}

Qua bài hướng dẫn này, các bạn sẽ biết được cách tạo sự và xử lý sự kiện TexhChanged của TextBox trong C# Winforms. Đây là một sự kiện rất thông dụng nên các bạn hãy luyện tập thật nhiều để thành thạo nói nhé, chúc các bạn thành công !!!

GIỚI THIỆU


Chào các bạn!

Hôm nay mình xin bắt đầu chuỗi bài hướng dẫn học lập trình Winform C# cơ bản kèm ví dụ cụ thể. Bài đầu tiên này mình xin phép giới thiệu với các bạn những thứ cơ bản nhất về Winform C#, và nó khác gì so với lập trình trên Console.
Chúng ta sẽ tìm hiểu 3 đặc điểm hướng đối tượng của nó

Các sự kiện của textbox trong C#

THUỘC TÍNH CỦA ĐỐI TƯỢNG

       Ở ngoài thực tế, thuộc tính là những đặc điểm của sự vật.
       Ví dụ: cô kia chân: dài, dáng: cao, da: trắng. Anh kia mũi: thấp, tóc: ngắn...v...v...
       Đối với Console App, thì thuộc tính là các biến kiểu private, nằm trong một Class và chúng ta hay dùng phương thức get - set để lấy giá trị cho nó. 
       Còn trong lập trình Winform C# thì thuộc tính là những đặc điểm - tính năng bên ngoài và bên trong của một đối tượng (Form, Control, Container,...).
       Dưới đây là bảng các thuộc tính giống nhau của các Control trong C#

    Các sự kiện của textbox trong C#
    Thuộc tính thường dùng trong C# - Winform

       
        Các bạn có thể thay đổi thuộc tính ở khung Properties trong lúc thiết kế Form, và cũng có thể thay đổi thuộc tính bằng code.

    Ví dụ: một textBox cơ bản vừa được kéo ra từ Toolbox. Các bạn thực hiện các dòng code sau ở hàm dựng của Form (hàm này sẽ chạy đầu tiên khi Form load lên)

    public YourForm()
    {
         InitializeComponent();
    
         //Code thay đổi thuộc tính của textBox1
         textBox1.BackColor = Color.LightYellow;
         textBox1.Text = "Lập trình cuộc sống";
         textBox1.TextAlign = HorizontalAlignment.Center;
         textBox1.ForeColor = Color.Blue;
         
         //Code thay đổi thuộc tính button1
         button1.Text = "IceTea Việt";
         button1.BackColor = Color.LightGreen;
         button1.FlatStyle = FlatStyle.Flat;
         button1.Enabled = false;     
    }
    

    Kết quả sẽ là:

    PHƯƠNG THỨC CỦA ĐỐI TƯỢNG

         Trong lập trình trên Console ta hay gọi một phương thức là "hàm". Nhưng nếu lập trình C# hướng đối tượng thì hàm đặt trong class được gọi là phương thức. Mỗi class dù là class thường hay là Form, hay bất cứ Control nào khác đều có phương thức riêng cho mình
         Chúng ta gọi (call) đến phương thức của nó, giống như là ra lệnh cho nó phải làm một hành động gì đó vậy. Cũng giông như chúng ta khi còn nhỏ ai cũng có phương thức là Học(), Ăn(), QuétNhà(),...vậy :D

      Phương thức thường dùng trong C# - Winform

      SỰ KIỆN CỦA CÁC ĐỐI TƯỢNG

           Sự kiện là gì?
           Ta cứ tưởng tượng như chúng ta nhảy, thì đó là sự kiện ghi nhận hành động nhảy. Con chim hót thì sự kiện là chim hót.
           Vậy trong winform C# theo đúng nghĩa đen nó, sự kiện là một hành động gì đó vừa được xảy ra. Ví dụ người dùng ấn vào một nút nào đó, thì đó là sự kiện Click, ấn phím nào đó thì là sự kiên KeyPress.

           Làm sao máy tính nhận biết được sự kiện?
           Nếu ở ngoài đời chúng ta nhìn bằng mắt, nghe bằng tai biết được sự kiện hành động đó đang diễn ra thì trong C# hỗ trợ cho chúng ta một bộ lắng nghe sự kiện EventHandler. Các bạn cứ hiểu đơn giản là nó sẽ dựa trên cơ chế ngắt của vi xử lý gửi và nhận các tín hiệu và trả về các phương thức cho bạn. Nếu tìm hiểu sâu ta sẽ đụng tới Delegate - thứ mà mình vẫn còn đang mơ hồ >.< Nếu sau này có điều kiện mình sẽ viết một bài sâu hơn để hướng dẫn các bạn với Event, Delegate và cách Custom sự kiện.

        Các sự kiện thường dùng

            
            Vậy thì cần sự kiện để làm gì?
            Các bạn cứ tưởng tượng sự kiện như là một câu lệnh điều kiện if, nếu xảy ra sự kiện gì đó - thì ta sẽ xử lý để làm việc gì đó. Ví dụ như nếu Click chuột vào button đăng nhập trong game, thì nó sẽ xử lý kiểm tra tài khoản và mật khẩu, và sẽ xuất ra thông báo đăng nhập thành công chẳng hạn... Cứ lấy ví dụ bằng game cho dễ hình dung :D

            Sự kiện được khởi chạy khi nào?
            - Người dùng có thể khởi chạy các event bằng cách tương tác với chương trình của bạn. Ví dụ: Việc nhấp một button sẽ khởi chạy event Click của button
            - Các control có thể tự khởi chạy event riêng của mình. Ví dụ: control Timer sẽ kích hoạt event Tick của nó vào các khoảng thời gian đều đặn
            - Hệ điều hành (bất kỳ phiên bản nào của Windows) có thể khởi chạy các event
            - Bạn có thể khởi chạy các event bằng cách gọi chúng giống như gọi một phương thức 

            Làm cách nào để thêm một sự kiện cho Form hoặc control?
            Các bạn có thể thêm sự kiện bằng code, hoặc click đúp vào control muốn thêm để thêm sự kiện thường dùng nhất của nó, hoặc đúp chuột vào tên sự kiện cần thêm  trong khung sự kiện của ô Properties khi đang thiết kế form. Khi đó Visual Studio sẽ tự động generate code cho sự kiện đó vào <YourForm>.Designer.cs và gọi hàm đó vào class <YourForm> để các bạn thiết lập xử lý sự kiện

        Các sự kiện của textbox trong C#
        Thêm sự kiện bằng khung Properties


        Vd: khi bạn đúp chuột vào sự kiện Click của button1 thì VS sẽ tự động tạo những đoạn code sau

        // 
        // Trong Yourform.Designer.cs
         
        this.button1.Click += new System.EventHandler(this.button1_Click);
        
        // Trong Class của YourForm nó sẽ gọi hàm để định nghĩa và xử lý cho sự kiện click trên
        
        private void button1_Click(object sender, EventArgs e)
        {
             //Các bạn sẽ cần gõ code xử lý sự kiện ở đây
        }
        

        Các bạn có thể thêm/xóa sự kiện bằng tay theo cú pháp

        //
        
        //Thêm vào Yourform.Designer.cs hay trong hàm dựng của Form đều được
        this.Control.Sựkiện += new System.EventHandler(this.tên hàm sự kiện);
        
        
        //và gọi hàm để định nghĩa cho sự kiện 
        private void tên hàm sự kiện(object sender, XEventArgs e)
        {
        //Trong đó X có thế là Mouse, hoặc Graphics, hoặc có thể bỏ trống tùy loại sự kiện
        }
        
        
        //Xóa event vừa tạo
        this.Control.Sựkiện -= new System.EventHandler(this.tên hàm sự kiện);
        
        //
        

        Hoặc các bạn cũng có thể gõ this.<control>.<Sự kiện> += rồi tab 2 lần để VS tự động generate sự kiện và hàm cho bạn nếu bạn ko biết rõ nó là EventArgs hay MouseEventArgs,.... Rất dễ đúng không các bạn :D

        Cuối cùng mình xin gửi đến các bạn các đoạn code mẫu sau để đoán kết quả nó sau khi chạy nhé :D

        //Trong Form.Designer.cs
        private void InitializeComponent()
        {
             this.textBox1 = new System.Windows.Forms.TextBox();
             this.button1 = new System.Windows.Forms.Button();
             this.SuspendLayout();
             // 
             // textBox1
             // 
             this.textBox1.Location = new System.Drawing.Point(156, 223);
             this.textBox1.Name = "textBox1";
             this.textBox1.Size = new System.Drawing.Size(183, 20);
             this.textBox1.TabIndex = 1;
             this.textBox1.BackColor = Color.LightYellow;
             this.textBox1.Text = "Lập trình cuộc sống";
             this.textBox1.TextAlign = HorizontalAlignment.Center;
             this.textBox1.Visible = false;
             // 
             // button1
             // 
             this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
             this.button1.Location = new System.Drawing.Point(210, 184);
             this.button1.Name = "button1";
             this.button1.Size = new System.Drawing.Size(75, 23);
             this.button1.TabIndex = 3;
             this.button1.Text = "TestButton";
             this.button1.UseVisualStyleBackColor = true;
             this.button1.Click += new System.EventHandler(this.button1_Click);
             // 
             // YourForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.ClientSize = new System.Drawing.Size(625, 467);
             this.Controls.Add(this.button1);
             this.Controls.Add(this.textBox1);
             this.Name = "YourForm";
             this.Text = "Form1";
             this.ResumeLayout(false);
             this.PerformLayout();
        }
        
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button1;
        
        
        //Trong Form Class của Form.cs
        private void button1_Click(object sender, EventArgs e)
        {
             MessageBox.Show("Cùng học MessageBox với IceTea Việt", "Thông báo");
        }
        

        Chúc các bạn học tốt, chào các bạn và hẹn gặp lại!