我的变量没有按预期改变
本文关键字:改变 变量 我的 | 更新日期: 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);
}
}
还更改了几件事:
- 事件处理程序仅设置一次 – 以避免在用户多次单击按钮时使用多个处理程序。
- 删除计数器 = new int(( – 没必要,您已经将其设置为 =1。
- Form1_Paint将 x2 坐标设置为计数器 *10,以便更容易看到移动。
我将推荐以下内容:
- 对绘图及其绘制事件使用
Panel
控件,例如Panel_Paint
- 在
Timer_Tick
使用Panel.Invalidate();
- 在绘制事件中,对
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();
}