• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tại sao sự kiện Form_Paint chạy liên tục mà chỉ vẽ duy nhất 1 lần ?

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

dong
Thành viên ưu tú
Thành viên ưu tú
Posts: 693
Joined: Thu 03/04/2008 7:46 am
Has thanked: 13 times
Been thanked: 2 times

Tại sao sự kiện Form_Paint chạy liên tục mà chỉ vẽ duy nhất 1 lần ?

Postby dong » Wed 23/10/2019 8:44 am

Tôi có đoạn code sau, tôi đưa thêm label vào trong Form_Paint để theo dõi nhảy số, tôi thấy label nhảy số liên tục nhưng e.Graphics.DrawString(...) chỉ vẻ duy nhất 1 lần, có ai biết tại sao ?

Code: Select all

public partial class Form1 : Form
    {       
        public Form1()
        {
            InitializeComponent();
            //progressBar1.Visible = false;
            progressBar1.Minimum = 0;
            progressBar1.Maximum = 100;

            this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

        }
        int iNum = 0;       
        private void btnDrawText_Click(object sender, EventArgs e) //PaintEventArgs e
        {           
            progressBar1.Value = 0;
            progressBar1.Visible = true;
            this.timer1.Interval = 100;
            this.timer1.Enabled = true;           
                       
        }
        private void ShadowedTextPaint(PaintEventArgs e, int num)
        {
            using (Font font1 = new Font("Times New Roman", 250, FontStyle.Bold, GraphicsUnit.Pixel))
            {
                PointF pointF1 = new PointF(310, 270);
                e.Graphics.DrawString(num.ToString(), font1, Brushes.LightGreen, pointF1);               
                lblNum.Text = num.ToString();
            }           
           
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            ShadowedTextPaint(e, iNum);
        }
        private void timer1_Tick(object sender, EventArgs e)
        {           
            if (progressBar1.Value < 100)
            {               
                Random rd = new Random();
                iNum = rd.Next(0, 999);               
                progressBar1.Value++;
            }
            else
            {               
                this.timer1.Enabled = false;
                progressBar1.Visible = false;               
            }
           
        }
  }



User avatar
nhochoclaptrinh
Thành viên danh dự
Thành viên danh dự
Posts: 517
Joined: Sat 28/05/2011 12:10 pm
Has thanked: 15 times
Been thanked: 83 times

Re: Tại sao sự kiện Form_Paint chạy liên tục mà chỉ vẽ duy nhất 1 lần ?

Postby nhochoclaptrinh » Wed 23/10/2019 11:12 pm

Mình thử thì không thấy label nhảy số và DrawString vẽ lại số mới. Thêm this.Invalidate(); vào timer event để trigger lại Paint event

dong
Thành viên ưu tú
Thành viên ưu tú
Posts: 693
Joined: Thu 03/04/2008 7:46 am
Has thanked: 13 times
Been thanked: 2 times

Re: Tại sao sự kiện Form_Paint chạy liên tục mà chỉ vẽ duy nhất 1 lần ?

Postby dong » Thu 24/10/2019 8:18 am

Mình đã thử 2 trường hợp có và không có this.Invalidate(); label nhảy số mà nhưng DrawString chỉ vẽ duy nhất một, ngay cả mình thêm protected override void OnPaint(PaintEventArgs e){...} cũng như cũ.


Return to “Visual Basic .NET và C# (VB.NET & C#)”

Who is online

Users browsing this forum: No registered users and 2 guests