我需要一些建议,以获得特定结果的最佳方式......
我的情景......
我有一个Form1类,它是我的主窗体,上面有一个图片框。
我有一个名为camera的第二个类,它使用事件处理程序从我的网络摄像头抓取一个帧(位图)。
然后我想以最佳方式将此框架传递到主窗体中的图片框。
目前在主表单中我有代码:
public static void setPB(Bitmap image)
{
var form = Form.ActiveForm as Form1;
form.pbWebCamDisplay = image;
}
然后在Camera类中我使用
Form1.setPB(设置currentFrame);
这很好用,但我不确定这是否是最好的编程习惯?是否可以使用自定义事件?
提前感谢您提供任何帮助
汤姆
答案 0 :(得分:0)
如果我在你的位置,我会使用事件。
答案 1 :(得分:0)
通过这种方式,您可以将功能的不同职责分为不同的类。不要处理Form类中的相机事件,而是按照您的方式进行操作。
答案 2 :(得分:0)
我会在Camera类上创建一个方法,该方法获取图片并返回一个Bitmap对象。
因此,在OnLoad或按钮的OnClick中,调用该方法并将返回值设置为PictureBox ...
var picture = new Camera().TakePicture();
myPictureBox.Image = picture;
类似的东西:)
编辑:如果Camera类是事件驱动的组件(Camera.NewFrame事件),请尝试:
(在构造函数中):
var camera = new Camera();
camera.OnNewFrame += new OnNewFrameEventHandler(MyEventHandler);
(事件处理程序)
public void MyEnventHandler(EventArgs comingFromComponent)
{
var image = comingFromComponent.Frame; // (hopefully this is the case :))
myPictureBox.Image = image;
}
答案 3 :(得分:0)
当然,事件是正确的选择。您可以使用它们实现Observer Design Pattern。 您当前的实现不是最佳实践 - 它强制Camera和Form类之间紧密耦合。
答案 4 :(得分:0)
是什么驱动了使Camera类抓住图片的事件? 这很重要。
如果表单本身触发了事件,您甚至不需要表单中的PictureBox setter。
顺便说一句,我和JorgeCórdoba一起,你需要一个二传手和一个抓斗事件。 奥卡姆剃刀。