在C#中按下按钮时,数字不断减少

时间:2013-12-15 12:01:45

标签: c# numbers

我是一名初学者,所以让我轻松一点。 当我按下按钮时,我想按名称(0-20)的顺序显示图像集。我设法用一个随机数(0-20),但如果我想减少从20到19到18等等,我该怎么做?

public partial class Form1 : Form
{

    //Random r = new Random();


    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string path = @"C:\Users\Ole-Jeger\Documents\Visual Studio 2013\Projects\Test_Spill1\Test_Spill1\Pictures\";
        //Heathbar.Image = Image.FromFile(path + r.Next(20).ToString() + ".png");
        Heathbar.Image = Image.FromFile(path + /*what to put here?*/)
    }
}

1 个答案:

答案 0 :(得分:3)

定义一个包含当前数字的类成员字段ImageNumber

public partial class Form1 : Form
{
    private const string path = 
        @"C:\Users\Ole-Jeger\Documents\Visual Studio 2013\Projects\Test_Spill1\Test_Spill1\Pictures\";

    private const int INT_ImageCount = 20;
    private int ImageNumber = INT_ImageCount;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (ImageNumber > 0)
        {
            ImageNumber -= 1;
            // How about disabling the button?
            if (ImageNumber == 0)
            {
                button1.Enabled = false;
            }
        }
        /*else
        {
            // Bad boys, Bad boys,
            // whatcha gonna do?
            // whatcha gonna do?
            // whatcha gonna do when the number is nil?

            // Note: if you disabled the button, this shoudln't be a problem
        }*/
        Heathbar.Image = Image.FromFile(path + ImageNumber.ToString() + ".png");
    }
}

此代码将从19.png开始,然后转到18.png17.png,依此类推,直至达到0.png

上面的代码不会输出20.png,因为它会在使用前减小该值。所以第一次迭代是20,然后它减少到19,然后使用它。

我使用了一个名为INT_ImageCount的常量设置为20,这反映了从0.png19.png有20个图像的事实。根据需要调整值。

注意:如果您没有0.png图片,则可能需要在使用时将1添加到变量中:

Heathbar.Image = Image.FromFile(path + (ImageNumber + 1).ToString() + ".png");

这样做,它会从20.png转到1.png。您也可以将验证更改为:

if (ImageNumber == 1)

这将导致代码从19.png转到1.png(更改合约以适应此情况,但常量不再代表图像数量,而是最后一个图像的值......在这种情况下你可能想称它为INT_MaxImage


兴趣点:

  1. 在现代CPU中使用int实际上更快,因为它可以是半个字的单词。在此方案中无需使用byte

  2. 我已将路径设为常量,实际上您可能希望将其设为readonly字段,从可执行文件的路径获取其值(或从配置或类似源中读取它) 。但这是另一个故事,并将被告知另一个时间。

  3. Random.Next(n)会提供一个可以归入[0, n)的号码,我的意思是它不包含n。换句话说:结果可以是0,但不是n。因此Random.Next(20)永远不会返回20

  4. 如上所述,默认情况下,-=对一个字节使用unchecked。因此它从0到255.使用checked{num -= 1}将导致它抛出异常。这是因为byte不能存储负值。

  5. 您可能有兴趣预先加载图像并将它们放在一个数组中,这样它可以更快地切换它们,同时避免加载相同的图像两次。