PROGRESSBAR – TIMER

1.     ProgressBar

ProgressBar được sử dụng để hiển thị thời gian thực hiện của một công việc nào đó.

winforms bai7 01 PNG

Hình 2.47. Điều khiển ProgressBar

Bảng 2.17. Một số thuộc tính của ProgressBar

Thuộc tính

Mô tả

Maximum

Giá trị tối đa của ProgressBar. Khi ProgressBar được lấp đầy nghĩa là ProgressBar đã đạt giá trị Maximum

Minimum

Giá trị nhỏ nhất của ProgressBar. Khi ProgressBar trông rỗng nghĩa là ProgressBar đang có giá trị Minimum

Value

Giữ giá trị hiện tại của ProgressBar, giá trị này nằm trong đoạn Minimum và Maximum

Style

Kiểu hiển thị của ProgressBar

Step

Lượng giá trị thêm vào Value khi phương thức PerformStep() được gọi

Bảng 2.18. Một số phương thức của ProgressBar

Phương thức

Mô tả

PerformStep()

Phương thức giúp tăng ProgressBar. Giá trị tăng là giá trị được thiết lập trong thuộc tính Step

Increment(<giá trị>)

Phương thức giúp tang ProgressBar. Giá trị tăng là tham số đầu vào <giá trị> của phương thức

2.     Timer

Điều khiển Timer cho phép thực thi lại một hành động sau một khoảng thời gian xác định.

Graphical user interface, application

Description automatically generated

Hình 2.48. Điều khiển Timer

Bảng 2.19. Một số thuộc tính của Timer

Thuộc tính

Mô tả

Interval

Thiết lập giá trị là một số nguyên. Giá trị nguyên này là thời lượng của một chu kì tính

Enable

Thiết lập giá trị True hoặc False. Nếu là giá trị True thì điều khiển Timer hoạt động, nếu là giá trị False thì điều khiển Timer không hoạt động

Bảng 2.20. Một số phương thức thường dùng của Timer

Phương thức

Mô tả

Start()

Start() kích hoạt điều khiển Timer hoạt động. Phương thức này tương ứng với việc thiết lập giá trị thuộc tính Enable là True

Stop()

Dừng hoạt động của điều khiển Timer. Phương thức này tương ứng với việc thiết lập giá trị thuộc tính Enable là False

Trong điều khiển Timer chỉ có một sự kiện đó là Tick:

Bảng 2.21. Sự kiện của Timer

Sự kiện

Mô tả

Tick

Tick là sự kiện được gọi trong mỗi chu kỳ Interval

3.     Ví dụ sử dụng các điều khiển ProgressBar và Timer

Trong ví dụ này sẽ thực hiện viết một chương trình áp dụng hai điều khiển ProgressBar và Timer, cụ thể sẽ tạo giao diện cho Form như sau rồi thực hiện một số sự kiện.

winforms bai7 01 PNG

Hình 2.49. Thiết kế giao diện sử dụng ProgressBar và Timer

Xử lý một số sự kiện sau:

·       Sử dụng Timer để hiện thị ngày giờ hiện tại.

·       Sử dụng ProgressBar để hiển thị % công việc đang thực hiện.

·       Xử lý sự kiện cho nút Button, khi click vào thì ngày giờ hiện tại sẽ hiện thị ra và thanh ProgressBar sẽ hiển thị % thực hiện công việc. Khi đạt đến 100% thì load Form hai.

Bây giờ chúng ta sẽ bắt đầu tạo giao diện cho Form1 và Form2. Đối với Form1 thì ta cần một số điều khiển như sau:

·       2 label để hiển thị ngày và hiển thị giờ.

·       1 ProgressBar để hiển thị thời gian thực hiện công việc.

·       2 Timer, Timer1 để tạo sự kiện hiển thị ngày giờ hiện tại, Timer2 để tạo sự kiện hiển thị % thực hiện công việc.

Sau khi tạo xong giao diện cho 2 Form, bây giờ đến lúc ta đi xử lý xự kiện cho điều khiển. Đới với Timer thì ta xử lý trên sự kiện Tick, ta vào Properties của Timer Click double vào sự kiện Tick để viết.

Trong Timer1 ta sẽ tạo sự kiện hiển thị ngày tháng hiện tại. Ta tạo mới một DateTime, sau đó sử dụng String.Format() để format kiểu hiển thị.

private void timer1_Tick(object sender, EventArgs e)

        {

            DateTime dt =  DateTime.Now.Add(new TimeSpan());

            lbl_gio.Text = String.Format("{0:hh:mm:ss tt}", dt);

            lbl_ngaythang.Text = String.Format("{0:dd/MM/yyyy}", dt);

        }

Trong Timer2 ta sẽ tạo sự kiện hiển thị % thực hiện công việc và khi đạt đến 100% thì load Form2. Ta sử dụng thuộc tính Maximum để thực hiện điều này.

private void timer2_Tick(object sender, EventArgs e)

        {

            Form2 frm = new Form2();

 

            progressBar1.Increment(1);

            lbl_complete.Text = "Connecting to from " + progressBar1.Value.ToString() + "%";

            if (progressBar1.Value == progressBar1.Maximum)

            {

                timer2.Enabled = false;

                frm.ShowDialog();

            }

        }

Sau khi tạo sự kiện cho ProgressBar và Timer, bây giờ ta sẽ viết sự kiện cho nút Button, khi Click vào thì sẽ bật Timer1 và Timer 2. Trong trường hợp ProgressBar đang ở trạng thái Enabled thì ta cho nó bằng False và ngược lại.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

private void button1_Click(object sender, EventArgs e)

        {

            if(progressBar1.Enabled == true)

            {

                progressBar1.Enabled = false;

                timer2.Start();

                timer1.Start();

            }

            else

            {

                progressBar1.Enabled = true;

                timer2.Stop();

                timer1.Stop();

            }

        }

Kết quả: Trước khi Click vào Button "Hiển thị ngày giờ" và sau khi Click.

winforms bai7 02 PNG

Hình 2.50. Kết quả sử dụng ProgressBar và Timer

4.     Bài tập

Đây là hai điều khiển đặc biệt trong C# winform được sử dụng rất nhiều cần luyện tập thêm.