0

特定の結果を達成するための最良の方法についてアドバイスが必要です...

私のシナリオ...

Form1クラスがあります。これは、画像ボックスが付いたメインのフォームです。

イベントハンドラーを使用してWebカメラからフレーム(ビットマップ)を取得するカメラと呼ばれる2番目のクラスがあります。

次に、このフレームをメインフォームの画像ボックスに最適な方法で渡します。

現在、メインフォームには次のコードがあります。

public static void setPB(Bitmap image) 
{

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

}

次に、カメラクラスで使用します

Form1.setPB(currentFrame);

これは問題なく動作しますが、これが最良のプログラミング手法であるかどうかはわかりませんでしたか?カスタムイベントを使用することは可能ですか?

助けてくれてありがとう

トム

4

5 に答える 5

0

私があなたの代わりにいたら、私はイベントを使います。

于 2010-09-06T09:55:42.787 に答える
0

ええ、私は完全に良いと思います。カメラ入力の処理を担当するカメラ クラスと、フォームのプライベート メンバー用のパブリック セッターがあります。私は少しも変わらないでしょう。

このようにして、機能に対するさまざまな責任をさまざまなクラスに分離します。Form クラス内でカメラ イベントを処理しないでください。代わりに、現在行っているように処理してください。

于 2010-09-06T09:57:03.140 に答える
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;
}
于 2010-09-06T09:57:14.927 に答える
0

確かに、イベントは正しい選択です。それらを使用して Observer Design Pattern を実装できます。現在の実装はベスト プラクティスではありません - Camera と Form クラスの間の密結合を強制します。

于 2010-09-06T09:59:26.920 に答える
0

Camera クラスに画像を取得させるイベントを駆動するものは何ですか? これは重要。

イベントがフォーム自体によって発生する場合は、フォームに PictureBox セッターも必要ありません。

ところで、私は Jorge Córdoba と一緒です。セッターとグラブ イベントがあれば十分です。オッカム剃刀。

于 2010-09-06T09:59:38.090 に答える