我的变量没有按预期改变

本文关键字:改变 变量 我的 | 更新日期: 2023-09-27 18:19:59

我的目的是在表单应用程序中每秒更改绘制线渐变。但是它不起作用。有价值的计数器"标签改变,但形式油漆不变..

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private int counter = 1;
        private void timer1_Tick(object sender, EventArgs e)
        {
            counter++;
            if (counter >= 10)
                timer1.Stop();
            lblCountDown.Text = counter.ToString();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            counter = 0;
            timer1.Tick += new EventHandler(timer1_Tick);
            counter = new int();
            timer1.Interval = 1000; // 1 second
            timer1.Start();
            lblCountDown.Text = counter.ToString();
        } 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawLine(new Pen(Brushes.Crimson),200,200,counter ,300) ;
        }
    }
}

我打算随时间更改我的图纸渐变,但变量在

来形成油漆...但它确实在 LBL 中发生了变化...

如果可以的话,帮帮我. 不知道该怎么办。

我的变量没有按预期改变

在这里,这个有效。答案是这样称呼。Invalidate(( 在每个计时器滴答声上。

public partial class Form1 : Form
{
    int counter = 0;
    public Form1()
    {
        InitializeComponent();
        timer1.Tick += new EventHandler(timer1_Tick);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        counter = 1;
        timer1.Interval = 1000; // 1 second
        timer1.Start();
        lblCountDown.Text = counter.ToString();
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        counter++;
        if (counter >= 10)
            timer1.Stop();
        lblCountDown.Text = counter.ToString();
        this.Invalidate();
    }
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawLine(new Pen(Brushes.Crimson), 200, 200, counter*10, 300);
    }
}

还更改了几件事:

  1. 事件处理程序仅设置一次 – 以避免在用户多次单击按钮时使用多个处理程序。
  2. 删除计数器 = new int(( – 没必要,您已经将其设置为 =1。
  3. Form1_Paint将 x2 坐标设置为计数器 *10,以便更容易看到移动。

我将推荐以下内容:

  1. 对绘图及其绘制事件使用Panel控件,例如 Panel_Paint
  2. Timer_Tick使用Panel.Invalidate();
  3. 在绘制事件中,对Pen的图形对象进行处置

在窗体中添加名为 panel1 的 Panel 控件。将所有其他控件保留在面板外部。

面板绘制和计时器事件的示例

 private void panel1_Paint(object sender, PaintEventArgs e)
  {
     using (Pen pen = new Pen(Brushes.Crimson))
        {
            e.Graphics.DrawLine(pen, 200, 200, counter, 300);                
        }
  }
 private void timer1_Tick(object sender, EventArgs e)
  {            
      counter++;
      if (counter >= 10)
          timer1.Stop();
      lblCountDown.Text = counter.ToString();
      panel1.Invalidate();           
  }