我需要从图片框的非公开成员中获取Image矩形的值。
如何获得该值?
提前致谢。
答案 0 :(得分:9)
这是使用反射获取值的方法:
PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle",
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
Rectangle rectangle = (Rectangle)pInfo.GetValue(pictureBox1, null);
虽然正如乔恩所说,但可能有更好的方法来实现你想要做的事情。通过反射访问私人成员通常是一个非常大的代码味道。
答案 1 :(得分:2)
嗯,你可以用反射来做...但你不应该这样做。目前尚不清楚“图像矩形的值”究竟是什么意思,但你绝对应该尝试通过公共API完成所有这些工作。你想要实现什么目标?可能有不同的方式。
编辑:好的,现在我看到你想要访问的属性......你可能对2004年提交的这个Connect issue感兴趣。你并不是唯一一个想要这个... ...不管你是否因为同样的原因需要它,我不知道。答案 2 :(得分:0)
虽然Nivas没有陈述他想要完成的任务,但我怀疑它与我刚刚看到的相似 - 将用户绘制的(即裁剪)矩形转换为图片框的图像空间。我没有像RvdK建议的那样尝试继承,我使用反射方法作为快速解决方法。 RvdK的建议或Microsoft开放的替代方法是访问ImageRectangle,将提供RectangleToImageRectangle方法。我想我可以包装一个继承自PB的对象...
Microsoft Connect Issue链接已损坏。
这是我使用的代码,它提供了PB图像的矩形,并测试了.Zoom和.StretchImage模式:
PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle",
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
Rectangle ImRectangle = (Rectangle)pInfo.GetValue(pictureBox1, null);
Point rTL = new Point((rectCropArea.Left - ImRectangle.Left) * pictureBox1.Image.Width / ImRectangle.Width,
(rectCropArea.Top - ImRectangle.Top) * pictureBox1.Image.Height / ImRectangle.Height);
Size rSz = new Size(pictureBox1.Image.Width * rectCropArea.Width / ImRectangle.Width,
pictureBox1.Image.Height * rectCropArea.Height / ImRectangle.Height);
'rect' = new Rectangle(rTL,rSz);