Как переместить кнопку в теме - PullRequest
0 голосов
/ 10 марта 2011

Мне нужно переместить кнопку в потоке, скорее я нажимаю одну кнопку, и моя кнопка движется вправо, пока не достигнет конца формы. 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 вправо (на единицу справа). Но мне нужно, чтобы он двигался без остановки. Может ли кто-нибудь помочь мне? Thanx.

Ответы [ 3 ]

3 голосов
/ 10 марта 2011

Предложение

Вы, вероятно, хотите использовать Timer для этого.

Добавьте элемент управления Timer в форму и используйте событие Timer_Tick для перемещения кнопки вправо.

Используйте свойство Timer Enabled для запуска и остановки кнопки.

Ответ

Если вы настаиваете на использовании Thread, вы хотите добавить цикл внутри вашего Go метода:

private void Go()
{
    while (btn.Location.X < this.Size.Width - btn.Size.Width)
    {
        Invoke(new moveBd(moveButton), button1);
        Thread.Sleep(100);
    }
}
2 голосов
/ 10 марта 2011

Вы должны поместить цикл в метод Go, чтобы он продолжал перемещать кнопку.

Однако использование потока для этого не лучший вариант. Вместо этого вы должны попробовать использовать элемент управления Timer. Это лучший способ выполнить код с интервалом, чем иметь цикл, и он будет запускать событие в главном потоке, так что вам не нужно будет использовать Invoke для доступа к элементам управления.

1 голос
/ 10 марта 2011

Вам нужен цикл в методе Go ().

private void Go()
{
    while ((button1.Location.X + button1.Size.Width) < this.Size.Width)
    {
        Invoke(new moveBd(moveButton), button1);
        Thread.Sleep(50);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...