C# Messagebox不会停止显示

C# Messagebox不会停止显示,c#,winforms,C#,Winforms,我正在尝试编写此代码,以便在单击从启动Obj时,“FORM1”将调用此方法以使用并启用timer1 当我点击开始按钮时,狗图片将开始向右移动,直到到达X=620,然后它将显示messagebox“win” 但是,消息框会一直显示,并且在小狗到达目标线后不会停止 class dog { public int startpost; public int TrackLenght = 620; public PictureBox dogpic = null; public

我正在尝试编写此代码,以便在单击从
启动Obj时,“FORM1”
将调用此方法以使用并启用
timer1

当我点击开始按钮时,狗图片将开始向右移动,直到到达
X=620
,然后它将显示messagebox
“win”

但是,消息框会一直显示,并且在小狗到达目标线后不会停止

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;
        }
    }
}
类狗
{
公共int startpost;
公共int轨道长度=620;
公共图片框dogpic=null;
公共int位置=0;
公共随机=新随机();
public void ResetStart()
{ 
dogpic.Location=新系统图纸点(40,startpost);
}
公共bool测试运行()
{
点p=狗的位置;
如果(p.X<轨道长度)
{
int距离=随机。下一步(5);
p、 X=p.X+距离;
位置=p;
位置=dogpic.Location.X;
返回false;
}
其他的
{
MessageBox.Show(dogpic.Name+“win”);
返回true;
}
}
}
您可以使用计时器

timer.Interval=5000;
timer.Enabled=true;
MessageBox.Show(dogpic.Name + " win");
您可以将其与tck事件关联

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

获胜后,尝试重置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;
        }}}
public bool testrun()
{
点p=狗的位置;
如果(p.X<轨道长度)
{
int距离=随机。下一步(5);
p、 X=p.X+距离;
位置=p;
位置=dogpic.Location.X;
返回false;
}
其他的
{
MessageBox.Show(dogpic.Name+“win”);
ResetStart()
返回true;
}}}

单击按钮时,您应调用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;
        }
    }
}
类狗
{
公共int startpost;
公共int轨道长度=620;
公共图片框dogpic=null;
公共int位置=0;
公共随机=新随机();
public void ResetStart()
{ 
dogpic.Location=新系统图纸点(40,startpost);
timer.Enabled=true;
}
公共bool测试运行()
{
点p=狗的位置;
如果(p.X<轨道长度)
{
int距离=随机。下一步(5);
p、 X=p.X+距离;
位置=p;
位置=dogpic.Location.X;
返回false;
}
其他的
{
MessageBox.Show(dogpic.Name+“win”);
timer.Enabled=false;
返回true;
}
}
}

希望它能工作。

你的
计时器在哪里?停止它。我的计时器在表格1中,我将它与计时器一起保留。Enabled=true;你需要为计时器添加代码,计时器有一个名为
Stop()
的方法,我相信我没有理解你的意思。我的回答对你错了吗??我想它会起作用的。我绝对配得上你的否决票:(没关系……你只能对一个问题或答案投一次票,但如果我的答案真的对你有帮助的话。你可以接受它作为答案!!!:)@eathapeking你不能再点击否决票按钮取消它吗?@Bridge:-非常感谢。到现在为止,我一直在想答案中出了什么问题。是第一个回答的人,但得到了-1:(如果我单击“不投票”,它将是-2。起初,我试图取消,但时间已过
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;
        }
    }
}