Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这个代码有什么问题?_C#_Winforms_Picturebox_Chess - Fatal编程技术网

C# 这个代码有什么问题?

C# 这个代码有什么问题?,c#,winforms,picturebox,chess,C#,Winforms,Picturebox,Chess,我写了一些代码来移动棋局中的国王;你能告诉我king不动的密码哪里出了问题吗?谢谢 EDITED2: public partial class Form1 : Form { PictureBox[,] pic = new PictureBox[8, 8]; private void pictureBox34_Click(object sender, EventArgs e) { if (pictureBox34.Image == chess9.Properties.Resou

我写了一些代码来移动棋局中的国王;你能告诉我king不动的密码哪里出了问题吗?谢谢

EDITED2:

public partial class Form1 : Form
{
    PictureBox[,] pic = new PictureBox[8, 8];

private void pictureBox34_Click(object sender, EventArgs e)
    {

if (pictureBox34.Image == chess9.Properties.Resources.siyahsah2)

{

f();
}
}

public void picarray()
{
        pic[0, 0] = pictureBox54;
        pic[0, 1] = pictureBox64;
        pic[0, 2] = pictureBox48;
        pic[0, 3] = pictureBox42;
        pic[0, 4] = pictureBox34;
        pic[0, 5] = pictureBox26;
        pic[0, 6] = pictureBox18;
        pic[0, 7] = pictureBox8;
        pic[1, 0] = pictureBox1;
        pic[1, 1] = pictureBox2;
        pic[1, 2] = pictureBox3;
        pic[1, 3] = pictureBox4;
              .
              .///thats so long(64 arrays)
              .
 }

public void f()
{



        int x = 3;
        int y = 3;

       for (int i = 1; i < x; i++)
       {
            for (int j = 1; j < y; j++)
            {
                pic[i, j] = new PictureBox();

                pic[i, j] = pic[i + 1, j + 1];

                pic[i, j] = new PictureBox();
                pic[i, j].Image = Image.FromFile("pic/siyahsah2.jpg");

          }

}
}
公共部分类表单1:表单
{
PictureBox[,]pic=新的PictureBox[8,8];
私有无效图片box34_单击(对象发送者,事件参数e)
{
if(pictureBox34.Image==chess9.Properties.Resources.siyahsah2)
{
f();
}
}
公共空间picarray()
{
pic[0,0]=pictureBox54;
pic[0,1]=picturebx64;
pic[0,2]=pictureBox48;
pic[0,3]=pictureBox42;
pic[0,4]=pictureBox34;
pic[0,5]=pictureBox26;
pic[0,6]=pictureBox18;
pic[0,7]=pictureBox8;
pic[1,0]=pictureBox1;
pic[1,1]=pictureBox2;
pic[1,2]=pictureBox3;
pic[1,3]=pictureBox4;
.
.///太长了(64个数组)
.
}
公共空间f()
{
int x=3;
int y=3;
对于(int i=1;i
很难用这段代码告诉您在整个代码中要做什么,但它看起来不正确,不是

我看到的问题是,在
f()
中,您创建了
PictureBox pic
,设置了它的一些属性,但不对它做任何操作。在
f()
结束时,该方法返回并且
pic
被销毁

如果这段代码实际上是编译的,那么在
picarray()
方法中使用
pix[]
,我会说你在游戏板的某个地方有一个类级变量。在这种情况下,你不需要行:

PictureBox[,] pic = new PictureBox[8, 8];
f()
中,因为它只是创建了一个仅存在于
f()
中的新空板,而不是更新您的真实板。

删除此行

PictureBox[,] pic = new PictureBox[8, 8]; from the f() function
我想,你又在用新图片初始化pic阵列了

if (pictureBox34.Image == Image.FromFile("pic/siyahsah2.jpg"))
你知道这行代码的含义吗

  • 每次执行此语句时,都会使用存储在磁盘上的映像创建一个新实例
  • 比较的计算结果永远不会为true,因为比较是基于引用的相等性,而对于新创建的对象,这显然不可能为true

不,您没有正确定义返回类型,因为代码中的任何地方都没有任何返回值

让我们看看代码可能会做什么

第一个问题是这一行:

if (pictureBox34.Image == Image.FromFile("pic/siyahsah2.jpg"))
FromFile
方法将创建一个新对象,由于该对象永远不会与图片框中存储的对象相同,因此该条件始终为false,并且永远不会调用方法
f

在方法
picarray
中,您使用的是变量
pic
,但该变量与
f
方法中使用的变量不同,因为该变量在该方法中局部声明

f
方法中,您正在声明一个您操作的图片框数组,但随后您只需退出该方法,而不对该数组执行任何操作,因此该数组就会消失,结果将永远不会在任何地方可见

由于数组是新创建的,它只包含null referecens,因此将它们从数组中的一个项目复制到另一个项目不会有任何效果。您还将项目从两个位置复制到同一位置,因此第二个副本将覆盖第一个副本

由于变量
i
j
被设置为零,
[i-1,j-1]
将尝试访问数组外的项,这将给您一个异常

您正试图在数组中某个项的
Image
属性中存储某些内容,但由于数组中的所有项都为空,因此没有可以设置的
Image
属性的图片框


很难说您想做什么,但这些信息至少可以帮助您理解代码没有做什么。

老实说,这里几乎所有的事情都是错误的,比如函数名,使用图像引用来检查它们是否是相同的非法数组索引(i-1,j-1)这个新版本仍然没有意义,picarray函数有什么用?为什么f()中会有奇怪的数组赋值?第一个甚至不做任何事情,因为它被第二个覆盖了,即使这样它也会弄乱整个数组。你能试着解释一下这个想法吗?你想实现什么?我试图在国际象棋游戏中实现国王棋子的动作。那么你有什么建议吗?谢谢我也很理解,但为什么是硬编码的值像pic[0,4]x=3,y=3和pictureBox34等等?我认为使用PictureBox比其他的更容易,不是吗?这不是唯一的错误。你应该提供更多的解释,说明这将如何解决提问者所遇到的问题。而不是为什么你不指出这一点,因为吉姆提供的答案也是不完整的e、 这似乎是,你有偏见!!没有偏见,我没有投反对票。但是,我觉得Jim的答案更完整,因为它解释了特定代码行导致问题的原因和方式。如果我们要学习如何自己修复错误,了解错误发生的原因非常重要。@code Gray:谢谢,我会记住你在未来的答案!谢谢你指出这一点,但我没有编辑我的帖子,因为其他PPL已经在他们的答案中写了这么多,你的答案很清楚。但是我不理解你关于新创建的数组的答案以及你答案的第3段,第6段。非常感谢,我编辑了我的帖子question@arash:您正在声明数组变量在方法内部,这意味着variab