PictureBox没有出现

时间:2015-05-13 20:14:57

标签: c# winforms picturebox

我有if语句,if语句是foreach,用于从string访问每个string[]

字符串是从文件中读取的NPC的一些参数。第一个代表NPC类型,它们是两个:"战斗"和"教",#34;教授"的最后string[] NPC是" end",其余的参数代表照片名称,我想在"对话框中加载#34;图片框。

我的测试文件如下所示:

teach
poza1
poza2
end

所以我在对话框PictureBox中加载了2张照片。我的想法是我必须暂停5秒foreach语句,否则对话框PictureBox图片加载速度太快,我不会看到它们。

所以我尝试这样做,以下是代码的外观:

if (date[0].Equals("teach")) //the first line of the date[] string, date represent the text from the file
{
    foreach (string parametru in date) // i think that you know what this does
    {
        if (parametru != "teach" && parametru != "end") // checking if the parameter isn't the first or the last line of the file
        {

            dialog.ImageLocation = folder + "/npc/" + score_npc + "/" + parametru + ".png"; //loading the photo
            System.Threading.Thread.Sleep(5000);

        }
    }
    //other instructions , irelevants in my opinion
}

在我尝试调试时,我意识到如果我使用MessageBox,该函数将加载这两张照片。此外,我确信参数将通过if语句。

修复此错误似乎很容易,但我无法弄清楚如何操作。

2 个答案:

答案 0 :(得分:0)

您可能需要为图片框发出PictureBox.Refresh和/或DoEvents命令,以实际获得加载和显示图片的机会。

MessageBox自动执行DoEvents ...这就是它在调试期间工作的原因。

答案 1 :(得分:0)

您现在正在做的只是冻结用户界面。请改用System.Windows.Forms.Timer。将计时器从工具箱中拖放到表单上。

然后创建一些Timer可以访问的字段,以存储您的照片和当前的pic位置:

private List<string> pics = new List<string>();
private int currentPic = 0;

最后,用你想要显示的照片加载它,然后启动计时器来完成它们:

pics.Clear();
pics.AddRange(date.Where(x => x != "teach" && x != "end"));
timer1.Interval = 5000;
timer1.Start();

然后你必须告诉你的计时器显示下一张照片。增加计数器,并在必要时重置。这样的事情应该有效。根据需要进行修改。

private void timer1_Tick(object sender, EventArgs e)
{
    dialog.ImageLocation = string.Format("{0}/npc/{1}/{2}.png", folder, score_npc, pics[currentPic]);

    currentPic++;

    if (currentPic >= pics.Count)
        currentPic = 0;

    // Alternatively, stop the Timer when you get to the end, if you want
    // if (currentPic >= pics.Count)
    //     timer1.Stop();
}