我认为我的问题很容易解释,这就是我的问题。我对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));
}