我需要在线程中移动按钮,而不是按一个按钮,我的按钮向右移动直到它到达表格的末尾。 Y是永久性的。
这就是我现在所拥有的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Thread thr = new Thread(Go);
thr.Start();
}
private delegate void moveBd(Button btn);
void moveButton(Button btn)
{
int x = btn.Location.X;
int y = btn.Location.Y;
btn.Location = new Point(x + 1, y);
}
private void Go()
{
Invoke(new moveBd(moveButton), button1);
}
}
当我点击button1时,仅向右移动1个(每个单元右侧)。但我需要它不停地移动。 有人能帮助我吗? 感谢名单。
答案 0 :(得分:3)
您可能希望使用Timer
来执行此操作。
在表单中添加Timer
控件,并使用Timer_Tick
事件将按钮移到右侧。
使用Timer的Enabled
属性启动和停止按钮。
如果您坚持使用线程,则需要在Go
方法中添加一个循环:
private void Go()
{
while (btn.Location.X < this.Size.Width - btn.Size.Width)
{
Invoke(new moveBd(moveButton), button1);
Thread.Sleep(100);
}
}
答案 1 :(得分:2)
您必须在Go
方法中放置一个循环,以便它继续移动按钮。
但是,使用线程不是最佳选择。您应该尝试使用Timer
控件。这是以间隔执行代码而不是循环执行代码的更好方法,它将在主线程中运行事件,因此您无需使用Invoke
来访问控件。
答案 2 :(得分:1)
你需要在Go()方法中使用循环。
private void Go()
{
while ((button1.Location.X + button1.Size.Width) < this.Size.Width)
{
Invoke(new moveBd(moveButton), button1);
Thread.Sleep(50);
}
}