Domanda

Ho bisogno di qualche consiglio per favore il modo migliore per raggiungere un particolare risultato ...

Il mio scenario ...

Ho una classe Form1, che è la mia maschera principale con una casella di immagine su di esso.

Ho una seconda classe chiamata fotocamera che utilizza un gestore di eventi afferra un telaio (bitmap) dalla webcam.

Allora voglio passare questa cornice alla casella di immagine nella maschera principale nel modo migliore.

Al momento, sotto forma principale che ho il codice:

public static void setPB(Bitmap image) 
{

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

}

poi nell'uso classe Camera I

Form1.setPB (currentFrame);

Questo funziona bene, ma non ero sicuro se questo era migliore pratica di programmazione? E 'possibile utilizzare gli eventi personalizzati?

Grazie in anticipo per qualsiasi aiuto

Tom

È stato utile?

Soluzione

vorrei creare un metodo sulla classe Camera, che prende l'immagine e restituisce un oggetto bitmap.

Così, alla OnLoad o nel OnClick di un pulsante, chiamare tale metodo e impostare il valore di ritorno al PictureBox ...

var picture = new Camera().TakePicture();
myPictureBox.Image = picture;

Una cosa del genere:)

Edit: Se la classe Camera è un evento guidato componente (evento Camera.NewFrame), provare:

(nel costruttore):

var camera = new Camera();
camera.OnNewFrame += new OnNewFrameEventHandler(MyEventHandler);

(gestore di eventi)

public void MyEnventHandler(EventArgs comingFromComponent)
{
   var image = comingFromComponent.Frame; // (hopefully this is the case :))
   myPictureBox.Image = image;
}

Altri suggerimenti

userei eventi se fossi al tuo posto.

Si, direi che è perfettamente bene. Si dispone di una classe di macchina fotografica che si occupa di gestire l'ingresso della telecamera e un setter pubblico per un membro privato della vostra forma. Non vorrei cambiare un po '.

In questo modo si separano le diverse responsabilità per le funzionalità in diverse classi. Non gestire gli eventi telecamera all'interno della classe Form, invece fare come si sta facendo.

Sicuramente, gli eventi sono la scelta giusta. È possibile implementare Observer Design Pattern che li utilizzano. Il tuo attuale implementazione non è delle migliori pratiche -. Costringe stretto accoppiamento tra fotocamera e classe Form

ciò che spinge l'evento che marca classe Camera afferrare l'immagine? Questo è importante.

Non è nemmeno necessario il setter PictureBox nella forma se l'evento viene generato dal modulo stesso.

A proposito, io sono con Jorge Córdoba, un setter e un evento afferrare sono tutto ciò che vi serve. Occam rasoio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top