【问题标题】:C# accessing form member from separate classC# 从单独的类访问表单成员
【发布时间】:2010-09-06 09:52:42
【问题描述】:

我需要一些关于实现特定结果的最佳方法的建议...

我的场景...

我有一个 Form1 类,这是我的主窗体,上面有一个图片框。

我有一个名为 camera 的第二个类,它使用事件处理程序从我的网络摄像头中抓取一个帧(位图)。

然后我想以最好的方式将此帧传递给主窗体中的图片框。

目前在主窗体中我有代码:

public static void setPB(Bitmap image) 
{

var form = Form.ActiveForm as Form1;
form.pbWebCamDisplay = image;

}

然后在我使用的相机类中

Form1.setPB(currentFrame);

这很好用,但是我不确定这是否是最佳编程实践?是否可以使用自定义事件?

提前感谢您的帮助

汤姆

【问题讨论】:

    标签: c# forms class members


    【解决方案1】:

    我会在 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;
    }
    

    【讨论】:

    • 感谢回复,可惜我需要图片框来显示直播。我最初在主窗体中使用计时器来抓取图像,但是,计时器和新帧事件处理程序不同步,因此很难正确处理位图。
    • 在这种情况下,您不能从表单中订阅事件吗?我会更新我的答案...
    • 那将是理想的,我不知道该功能。你能给我一些示例代码吗?
    • 谢谢 - 我会去实现它并让你知道 -
    • 您使用的是什么(相机)类,完全来自 AForge.NET 框架?我去看看,看看我说的是不是正确的......
    【解决方案2】:

    如果我在你的位置,我会使用事件。

    【讨论】:

    • 您能否为我指明正确的方向,如何实现这一点?谢谢
    【解决方案3】:

    是的,我会说非常好。您有一个负责处理相机输入的相机类和一个用于表单私有成员的公共设置器。我不会改变一点。

    这样您就可以将功能的不同职责分成不同的类。不要在 Form 类中处理相机事件,而是照你做的那样做。

    【讨论】:

      【解决方案4】:

      当然,事件是正确的选择。您可以使用它们来实现观察者设计模式。 您当前的实现不是最佳实践 - 它强制 Camera 和 Form 类之间的紧密耦合。

      【讨论】:

      • 您好,您能否详细说明一下,如果您有任何链接会很棒。感谢您的帮助
      • Microsoft 将带有事件的 Observer 称为事件模式,很高兴知道。
      【解决方案5】:

      是什么驱动了使 Camera 类抓取图片的事件? 这很重要。

      如果表单本身触发了事件,您甚至不需要在表单中使用 PictureBox 设置器。

      顺便说一句,我和 Jorge Córdoba 在一起,二传手和抢夺事件就是你所需要的。 奥卡姆剃刀。

      【讨论】:

      • 所以.. 我正在使用 Aforge 框架 (aforgenet.com),它有自己的自定义事件处理程序来抓取帧。
      猜你喜欢
      • 2014-06-19
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 2016-08-05
      • 2011-06-04
      相关资源
      最近更新 更多