[C#] Number Effect Counter up and down in winform

Xin chào các bạn, bài viết hôm nay mình tiếp tục chia sẻ các bạn tạo hiệu ứng khi thay đổi số up and down trên lập trình c#, winform.
Ở demo trên, khi chúng ta thay đổi giá trị số sẽ chạy hiệu ứng từ từ.
 

VIDEO DEMO



Ở bài viết này mình sử dụng yield return để thực hiện.
using NodaTime;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EffectNumber
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int oldValue;
        private void Form1_Load(object sender, EventArgs e)
        {
            oldValue = Convert.ToInt32(lblNumber.Text);
        }
        private IEnumerable<int> CountText(int newValue, int speed)
        {
            var CountFPS = 30;         
            var Duration = 1;
            int previousValue = oldValue;
            int stepAmount;
            oldValue = newValue; 

            if (newValue - previousValue < 0)
            {
                stepAmount = Convert.ToInt32( Math.Floor(Convert.ToDouble( (newValue - previousValue) / (CountFPS * Duration) ))); 
            }
            else
            {
                stepAmount = Convert.ToInt32( Math.Ceiling((newValue - previousValue) / (CountFPS * Duration) * 1.0d)); 
            }
            if (stepAmount == 0)
            {
                yield return newValue;

            }
            else {
                if (previousValue < newValue)
                {
                    while (previousValue < newValue)
                    {
                        previousValue += stepAmount;
                        if (previousValue > newValue)
                        {
                            previousValue = newValue;
                        }

                        yield return previousValue;


                        Thread.Sleep(speed);
                    }
                }
                else
                {
                    while (previousValue > newValue)
                    {
                        previousValue += stepAmount;
                        if (previousValue < newValue)
                        {
                            previousValue = newValue;
                        }

                        yield return previousValue;


                        Thread.Sleep(speed);

                    }
                }
            }
           
        }

        private void btnRun_Click(object sender, EventArgs e)
        {
            Task.Run(() =>
            {
                foreach (int item in CountText(Convert.ToInt32(txtNewNumber.Text), Convert.ToInt32(txtSpeed.Text)))
                {
                    this.BeginInvoke(new Action(() => {
                        lblNumber.Text = item.ToString("N0");

                    }));
                }

            });
        }
    }
}

Các bạn có thể chỉnh sửa tốc độ theo ý muốn.
DOWNLOAD SOURCE CODE

DOWNLOAD CODE

Chúc các bạn thành công với thủ thuật này.
Nguồn : LapTrinhVB.Net

9 comments:

  1. Mọi người có thể tùy biến code này làm một chương trình tự nhảy số theo thời gian để làm chương trình gì đó cũng ok nha :D

    ReplyDelete
  2. xem video thi ok, nhung k biet dung de lam gi?

    ReplyDelete
  3. code này dạng như tùy chỉnh thời gian số chạy phải k nhỉ :s, vì thấy nhập số báo nhiêu nó cũng ra vậy nhưng ở cái khung speed đó do mình tùy chỉnh mà :s

    ReplyDelete
  4. https://www.2035themes.com/fastcast/?page_id=2106&dev=1&pagename=gamer

    ReplyDelete
  5. không hiểu có lợi ích gì ?

    ReplyDelete
  6. https://bit.ly/m/best-hacking-forums

    ReplyDelete
  7. thủ thuật này để làm gi?

    ReplyDelete

Total Pageviews

Visual Basic (49) C# (27) Software (9) Tips (8) BLOGGER (7) Cam-Xuc-Cuoc-Song (6) Thong-Bao (4) HTML (3) JAVASCRIPT (3) AutoIT (2) CSS (1) Facebook (1)