如何将 PictureBox Image 的引用附加到变量而不是变量的对象?
How to keep a reference of PictureBox Image attached to a variable and not to an object of the variable?
我在 C# 中工作,希望将 PictureBox.Image 的引用附加到变量而不是变量的对象。这意味着我想自由更改此变量的对象,而 PictureBox 将始终引用该变量。
我有一个 class 可以处理图像、合并它们和 returns 图像 ImageShow
以在 PictureBox 中可视化。通常我必须将新的 Image 对象分配给一个变量。当我这样做时,PictureBox 会保留旧对象,而我希望它采用新对象。
class Foo
{
Image ImageShow = null;
public void FooFunc()
{
//some code
changeImageSize(new Size(600,800))
}
private void changeImageSize(Size newSize)
{
if(ImageShow != null)
ImageShow.Dispose();
ImageShow = new Bitmap(newSize.Width, newSize.Height);
}
}
当我执行这样的代码时:
var obj = Foo();
obj.SetImage(new Bitmap(50,50));
pictureBox.Image = obj.GetImage();
obj.FooFunc();
PictureBox 保留已销毁的旧 Image 对象。因此,如果我尝试对 PictureBox 执行任何操作,就会出现错误。
每次返回一个新的图像对象会在 class 和 PictureBox 的内部代码之间产生许多依赖关系。所以这对我来说不是最好的解决方案。
简单示例:
Image img;
img = new Bitmap(200, 200);
pictureBox1.Image = img;
img = new Bitmap(300, 300);
Picturebox 继续引用旧图像
pictureBox1.Image.Size = {Width = 200 Height = 200}
虽然我想引用 img
变量和新对象
您可以查看使用 PictureBox.Bindings.Add()
绑定 PictureBox
的 Image
属性 并使对象绑定到实现 INotifyPropertyChanged
所以当您为该对象设置图像 属性 时,Picturebox 会更新 - 或者,更简单地说,您可以将 ImageShow
封装在 属性 中,并添加将图片框更新到 setter.
private Image _imageShow = null;
public Image ImageShow {
get {
return _imageShow
}
set {
_imageShow = value;
pictureBox1.Image = value;
}
}
然后,每当您将 ImageShow
设置为新图像时,PictureBox
将设置为相同的图像。
您的代码无法按原样工作的原因是因为 ImageShow
正在存储对 Image
的引用,并且设置 pictureBox1.Image
会将 属性 设置为对相同 Image
的引用 - 但如果您更改 ImageShow
引用的内容, PictureBox
将永远不会看到它,因为它引用的是原始图像,而不是字段 ImageShow
.
我在 C# 中工作,希望将 PictureBox.Image 的引用附加到变量而不是变量的对象。这意味着我想自由更改此变量的对象,而 PictureBox 将始终引用该变量。
我有一个 class 可以处理图像、合并它们和 returns 图像 ImageShow
以在 PictureBox 中可视化。通常我必须将新的 Image 对象分配给一个变量。当我这样做时,PictureBox 会保留旧对象,而我希望它采用新对象。
class Foo
{
Image ImageShow = null;
public void FooFunc()
{
//some code
changeImageSize(new Size(600,800))
}
private void changeImageSize(Size newSize)
{
if(ImageShow != null)
ImageShow.Dispose();
ImageShow = new Bitmap(newSize.Width, newSize.Height);
}
}
当我执行这样的代码时:
var obj = Foo();
obj.SetImage(new Bitmap(50,50));
pictureBox.Image = obj.GetImage();
obj.FooFunc();
PictureBox 保留已销毁的旧 Image 对象。因此,如果我尝试对 PictureBox 执行任何操作,就会出现错误。
每次返回一个新的图像对象会在 class 和 PictureBox 的内部代码之间产生许多依赖关系。所以这对我来说不是最好的解决方案。
简单示例:
Image img;
img = new Bitmap(200, 200);
pictureBox1.Image = img;
img = new Bitmap(300, 300);
Picturebox 继续引用旧图像
pictureBox1.Image.Size = {Width = 200 Height = 200}
虽然我想引用 img
变量和新对象
您可以查看使用 PictureBox.Bindings.Add()
绑定 PictureBox
的 Image
属性 并使对象绑定到实现 INotifyPropertyChanged
所以当您为该对象设置图像 属性 时,Picturebox 会更新 - 或者,更简单地说,您可以将 ImageShow
封装在 属性 中,并添加将图片框更新到 setter.
private Image _imageShow = null;
public Image ImageShow {
get {
return _imageShow
}
set {
_imageShow = value;
pictureBox1.Image = value;
}
}
然后,每当您将 ImageShow
设置为新图像时,PictureBox
将设置为相同的图像。
您的代码无法按原样工作的原因是因为 ImageShow
正在存储对 Image
的引用,并且设置 pictureBox1.Image
会将 属性 设置为对相同 Image
的引用 - 但如果您更改 ImageShow
引用的内容, PictureBox
将永远不会看到它,因为它引用的是原始图像,而不是字段 ImageShow
.