2014-03-12 3 views
1

.NET을 사용하여 C#으로 프로그래밍 중입니다. 폼 디자이너를 사용하여 폼을 만들었습니다. 내가 공개 한 양식에 직렬 포트 객체를 추가했습니다. Visual Studio에서 frmMain : form이라는 클래스를 자동으로 생성했습니다. 나는 Serial_Comm_Handler이라고 불리는 시리얼 포트 인터페이스 전용 클래스를 작성하기로 결정했다. 내 Serial_Comm_Handler 클래스 내의 직렬 포트 개체 (serialPortCOM)에 액세스하려고합니다. 또한 멤버 함수를 나중에 호출하고 싶습니다. 모든 것이 동일한 네임 스페이스에 있습니다.frmMain에 대한 참조 얻기

frmMain 개체에 대한 개체 참조에 액세스하는 방법에 대해 혼란스러워합니다. Visual Studio 자동 생성 코드가 formMain 객체를 인스턴스화하는 방법을 따르려고합니다. 나는 다시 Program Class, Main 기능을 따라 갔고, 둘 다 정적 인입니다. 여기 Application.Run(new frmMain)으로 전화가 왔습니다.

여기가 양식에 대한 참조가 생성 된 곳입니다. 나는 그들이 서로 접근 할 수 있도록 공개 된이 영역에서 나의 수업 두 곳 모두에 대한 참조를 작성하기를 희망했다. 이 곳이 맞습니까? 나는 클래스와 함수가 정적이기 때문에 몇 가지 시도를했지만, 그렇게하지 못하는 것 같습니다. 이것이 정확한 접근 방법이라면 나는 약간의 충고를하고 싶다.

답변

2

일반적으로 처리기 클래스는 UI에서 메서드를 직접 호출하거나 속성에 액세스하지 않아야합니다.

Serial_Comm_Handler가 직렬 포트 개체를 필요로하는 경우 양식 (이 개체를 소유 함)은 처리기 클래스를 인스턴스화하고 직렬 포트 개체를 전달해야합니다.

처리기가 변경 양식을 통보해야하는 경우 이벤트를 사용하여 변경 작업을 수행해야합니다. 이것이 WPF라면 (필자는 그렇지 않다고 가정하고 있음) 뷰 모델에 통보해야하며, 뷰 모델은 PropertyChanged를 통해 UI에 알린다.

폼 클래스에 대한 액세스가 필요한 경우 처리기를 인스턴스화하는 위치에 따라 다릅니다. Program 클래스에서이 작업을 수행하는 경우 (확실히 권장하지 않음) Application.Run을 호출하기 전에 참조에 할당 할 새 명령문을 리팩터링 한 다음 참조와 함께 핸들러를 인스턴스화 할 수 있습니다. 양식에서 처리기를 생성하는 경우 "this"를 전달하여 참조를 제공하십시오.

통계는 포함되어 있지만 직렬 포트 개체를 노출하는 양식 클래스에 정적 속성이있을 수 있으므로 권장하지 않는 것이 좋습니다.

다시 말해서 처리기의 양식에 대한 참조가 필요 없습니다. 핸들러는 주어진 직렬 포트를 처리하고 이벤트를 발생시킵니다. 시리얼 포트가 어디서 왔는지 또는 UI가 무엇인지 신경 쓰지 않아야합니다.

+0

나는 당신의 조언을 듣고'Serial_Comm_Handler' 클래스의 인스턴스를 frmMain 객체에 추가했습니다. –

관련 문제