C # Доступ к члену формы из отдельного класса

StackOverflow https://stackoverflow.com/questions/3650509

  •  01-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

На данный момент в основной форме у меня есть код:

public static void setPB(Bitmap image) 
{

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

}

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

Form1.setpb (curetframe);

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

Заранее благодарю за любую помощь

Том

Это было полезно?

Решение

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

Таким образом, в onload или в onClick of кнопки вызовите этот метод и установите значение возвращаемого значения на i PictureBox ...

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

Что-то такое :)

Редактировать: Если класс камеры является компонентом для ведения события (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;
}

Другие советы

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

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

Таким образом, вы разделяете различные обязанности для функций в разные классы. Не обрабатывайте события камеры внутри класса формы, вместо этого делают, как вы делаете.

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

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

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

Кстати, я с Хорхе Córdoba, сеттер и событие захвата - это все, что вам нужно. Accam бритва.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top