按下一个按钮,使一组图片一个接一个地出现在一个pictureBox中



我认为我的问题很容易解释,这就是我的问题。我对c#还比较陌生,在c++方面也有一些经验,但从未处理过这类问题。当我编译代码时,它说我试图在点击6次后除以零。到目前为止,这是我的代码:

public partial class Form3 : Form {
    int btnClick=0;
    int brPicsArray = 7; 
    public Form3() {
        InitializeComponent();
    }
    private void Form3_Load(object sender, EventArgs e) {
    }
    private void button1_Click(object sender, EventArgs e) {
        btnClick++;
        brPicsArray = btnClick % brPicsArray;
        switch (brPicsArray) {
            case 1: pictureBox1.Image = Image.FromFile(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic1.jpg"); 
                break;
            case 2: pictureBox1.Image = Image.FromFile(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic2.jpg");
                break;
            case 3: pictureBox1.Image = Image.FromFile(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic3.jpg"); 
                break;
            case 4: pictureBox1.Image = Image.FromFile(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic4.jpg");
                break;
            case 5: pictureBox1.Image = Image.FromFile(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic5.jpg");
                break;
            case 6: pictureBox1.Image = Image.FromFile(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic6.jpg"); 
                break;
            case 7: pictureBox1.Image = Image.FromFile(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic7.jpg"); 
                break;

您的问题是将brPicsArray设置为btnClick % brPicsArray,最终将等于0

相反,您应该使用以下内容:

switch (brPicsArray % btnClick) {
    case 0: 
    ...
}

注意:我们从更标准的事例索引0开始,并且我们没有更改brPicsArray的值。


我建议您将图像名称存储在数组中,并使用数组的Count属性,而不是单独存储的变量。在这种情况下,你最终会得到更像这样的东西:

public partial class Form3 : Form {
    string[] imageFilenames = new string[] {
        "C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic1.jpg",
        "C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic2.jpg",
        "C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic3.jpg",
        "C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic4.jpg",
        "C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic5.jpg",
    };
    int btnClick=0;
    private void button1_Click(object sender, EventArgs e) {
        btnClick++;
        pictureBox1.Image = Image.FromFile(imageFilenames[imageFilenames.Count % btnClick]);
    }
}

Modulo(%)是一个除法函数,因此当brPicsArray变为0时(当除法没有余数时),您将得到一个被零除的错误。

您收到错误是因为。如果btClick=7,则您正在进行

btnClick % brPicsArray.

与相同

7 % 7

两者都返回0;

一个非常小的问题,您初始化了brPicsArray值并对其进行了修改,这导致了0,因此除以零异常,一个小的解决方案

 private void button1_Click(object sender, EventArgs e)
    {
        btnClick++;
        int switchPicsValue = btnClick % brPicsArray;
        switch (switchPicsValue)

只需为switch 初始化一个新变量

我认为你不需要在这里切换,因为你的图片是用数字标记的,而且你正在计算一个数字来获得图像,所以计算这个数字,并将其附加到文件名中,但要确保你的数字永远不会超过的范围(即1-7)

示例:

private_void button1_Click(object sender, EventArgs e)
{
    btnClick++;
    if(btnClick > 7) btnClick = 1; // or 7 if you don't want to loop
    pictureBox1.Image = Image.FromFile(String.Format(@"C:UsersKoriceDocumentsVisual Studio 2012Projects.....form3pic{0}.jpg", btnClick));
}

相关内容

  • 没有找到相关文章