private void pictureBox1_Click(object sender, EventArgs e) { Image pic = pictureBox1.Image; if(isopen) { isopen = false; pictureBox1.Image = Resources.image2; } else { isopen = true; // pictureBox1.Image = Resources.image1;这样写正常的 pic = Resources.image1;//这样写不行,难道 pic和pictureBox1.Image 不是同一个数据类型吗 ? } } private bool isopen { get; set; }
这不是数据类型不同,是你对C#基础知识理解还不够啊,你看看属性property的标准写法:
private Image image = null; public Image { get{ reutrn image; } set{ image = value; } }
Image pic = pictureBox1.Image这条话会让pic指向get里面的image,而不是对象的属性,
你再用pic = Resources.image1,结果就是pic变成了指向Resources.image1,而不是给pictureBox1.Image属性赋值Resources.image1
非常感谢你的解答 。我现在 弄懂了,当时 有一个误区 ,一个变量引用一个对象的属性,变量改变以为对象属性也会改变。下面有代码,虽然代码弄复杂了,但是理解东西还是有收获的 。另外 收获·
companyModel model =(companyModel ) node.Tag; 这里 model可以不需要new companyModel(),可以不需要开辟新空间.如果已经有空间只要指向原来空间,不需要new()。类似companyModel model = xxx ,有“=”就相当于有分配的堆空间,无需要new,就不会开辟新的空间,直接引用原来空间。
{ PictureBox pb = pictureBox1; Image pic=null;//要赋值null,否则没空间,后面pic无法使用 if (isopen) { isopen = false; // pictureBox1.Image = Resources.image2; // pb.Image = Resources.image2; pic = Resources.image2; pb.Image = pic; // pictureBox1.Refresh(); // pictureBox1.Image = pic; } else { isopen = true; // pictureBox1.Image = Resources.image1;这样写正常的 pic = Resources.image1; pb.Image = pic; // pictureBox1.Image = pic; // pictureBox1.Refresh(); }