2010-09-06 2 views
0

Мне нужен совет, пожалуйста, на лучший способ для достижения конкретного результата ...C# форма получающего доступ член из отдельного класса

Мой сценарий ...

У меня есть класс Form1, который является моим главным Форма с изображением на нем.

У меня есть второй класс, называемый камерой, который с помощью обработчика событий захватывает рамку (растровое изображение) из моей веб-камеры.

Затем я хочу передать эту рамку в коробку с картинками в основной форме в лучшей форме.

В настоящее время в главной форме у меня есть код:

public static void setPB(Bitmap image) 
{ 

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

} 

то в классе камеры я использую

Form1.setPB (currentFrame);

Это прекрасно работает, однако я не был уверен, что это была лучшая практика программирования? Можно ли использовать пользовательские события?

Заранее спасибо за любую помощь

Том

ответ

0

Я бы создал метод класса Camera, который принимает изображение и возвращает объект Bitmap.

Таким образом, в OnLoad или в OnClick кнопки, вызвать этот метод и установить возвращаемое значение в PictureBox ...

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

Нечто подобное :)

Edit: Если класс 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; 
} 
+0

Спасибо за ответ, к сожалению, мне нужно окно с изображением, чтобы показать прямой эфир. Сначала я использовал таймер в основной форме, чтобы захватить изображение, однако таймер и обработчик события нового кадра были не синхронизированы, поэтому затруднялось правильно распоряжаться растровыми изображениями. – TomP89

+0

В таком случае вы не можете просто подписаться на мероприятие из своей формы? Я обновлю свой ответ ... – Bertvan

+0

, что было бы идеально, я не знал об этой функции. Сможете ли вы дать мне пример кода. – TomP89

0

я использовал бы события, если бы я был на вашем месте.

+0

Не могли бы вы указать мне в правильном направлении, как это осуществить? Спасибо – TomP89

0

Да, я бы сказал, это прекрасно. У вас есть класс камеры, который отвечает за обработку входных данных камеры и публичный сеттер для частного участника вашей формы. Я бы ничего не изменил.

Таким образом, вы разделяете различные обязанности по функциональности в разных классах. Не обрабатывайте события камеры внутри класса Form, а делайте то же самое, что и вы.

0

Определенно, события правильный выбор. Вы можете использовать шаблон проектирования Observer, используя их. Ваша текущая реализация не самая лучшая практика - она ​​заставляет жесткую связь между камерой и классом Form.

+0

Привет, Вы могли бы разработать, пожалуйста, если у вас есть какие-либо ссылки, которые были бы замечательными. Спасибо за вашу помощь. – TomP89

+0

. Здесь вы найдете: http://msdn.microsoft.com/en-us/library/ee817669.aspx –

+0

Microsoft называет наблюдателя событиями событий, которые необходимо знать. –

0

что приводит к тому, что класс камеры захватывает изображение? Это важно.

Вам даже не нужен установщик PictureBox в форме, если событие запускается самой формой.

BTW, я с Хорхе Кордобой, сеттер и событие захвата - все, что вам нужно. Оксам бритвы.

+0

Итак, я использую Aforge framework (aforgenet.com), у которого есть собственный пользовательский обработчик событий, который захватывает фреймы. – TomP89

Смежные вопросы