2013-08-19 2 views
2

Я пытаюсь написать этот код, чтобы при щелчке по началу Obj от "FORM1" этот метод будет использовать и активировать timer1.Messagebox не перестает показывать

При нажатии на кнопку запуска собака картина начнет двигаться в правую сторону, пока не достигнет X= 620, то он будет показывать MessageBox " win"

Однако окно сообщения продолжает показывать и не останавливается после dogpic рич линии ворот

class dog 
{ 
    public int startpost; 
    public int TrackLenght = 620; 
    public PictureBox dogpic = null; 
    public int Location = 0; 
    public Random random=new Random(); 

    public void ResetStart() 
    { 
     dogpic.Location = new System.Drawing.Point(40, startpost); 
    } 

    public bool testrun() 
    { 
     Point p = dogpic.Location; 

     if (p.X < TrackLenght) 
     { 
      int distance = random.Next(5); 

      p.X = p.X + distance; 
      dogpic.Location = p; 
      Location = dogpic.Location.X; 
      return false; 
     } 
     else 
     { 
      MessageBox.Show(dogpic.Name + " win"); 

      return true; 
     } 
    } 
} 
+2

Где ваш 'таймер'? Просто прекрати это. –

+0

мой timer_Tick находится в FORM1, я оставляю его с timer.Enabled = true; – eathapeking

+0

вам нужно добавить код для 'timer_tick', у таймера есть метод под названием' Stop() 'Я считаю, – Sayse

ответ

3
//suppose dog1 is an instance of your dog class 
//here is the Tick event handler of your timer1 
private void timer1_Tick(object sender, EventArgs e){ 
    timer1.Enable = !dog1.testrun(); 
} 
+0

это не остановка T^T ..... – eathapeking

+0

Где я должен поставить messagebox.show – eathapeking

1

Вы можете использовать таймер.

timer.Interval=5000; 
timer.Enabled=true; 
MessageBox.Show(dogpic.Name + " win"); 

Вы можете связать его с событием tck.

private void timer_Tick(object sender,EventArgs evt) { 
    timer.Enabled=false; 
} 
+0

Почему downvote ??? –

+0

who downvote - = - i click upvote, но это -1> .... < – eathapeking

+0

Я не получил вашу точку. Является ли мой ответ неправильным для вас? Думаю, это сработает. Я определенно сделал достойный ваш downvote :( –

1

Попробуйте переустановку p.X после победы.

не видит его код, но я думаю, что вы должны сделать что-то вроде этого:

public bool testrun() 
    { 

     Point p = dogpic.Location; 

     if (p.X < TrackLenght) 
     { 
      int distance = random.Next(5); 

      p.X = p.X + distance; 
      dogpic.Location = p; 
      Location = dogpic.Location.X; 
      return false; 
     } 
     else 
     { 

      MessageBox.Show(dogpic.Name + " win"); 
      ResetStart() 
      return true; 
     }}} 
1

По щелчку кнопки вы должны вызвать функцию ResetStart(), которая позволит таймер и делать свою работу и по достижению конечной точки он должен отключить таймер.

class dog 
{ 
    public int startpost; 
    public int TrackLenght = 620; 
    public PictureBox dogpic = null; 
    public int Location = 0; 
    public Random random=new Random(); 

    public void ResetStart() 
    { 
     dogpic.Location = new System.Drawing.Point(40, startpost); 
     timer.Enabled=true; 
    } 

    public bool testrun() 
    { 
     Point p = dogpic.Location; 

     if (p.X < TrackLenght) 
     { 
      int distance = random.Next(5); 

      p.X = p.X + distance; 
      dogpic.Location = p; 
      Location = dogpic.Location.X; 
      return false; 
     } 
     else 
     { 
      MessageBox.Show(dogpic.Name + " win"); 
      timer.Enabled=false;  
      return true; 
     } 
    } 
} 

Надеюсь, что это сработает.

+0

Где я должен поставить messagebox.show – eathapeking