윈폼을 작업하다 보면 깜빡하고 UI 도구 이름을 설정안하고 이벤트를 만들다보니 코드에서 삭제할 때 다시 윈폼 디자이너로 가면 접근 오류가 나타납니다.
윈폼을 잘 안해보시다가 할 경우 갑작스런 현상에 당황을 하실텐데
위의 경우는 윈폼 디자이너부분과 코드 부분이 Partial Class이기 때문입니다.
윈폼의 경우 기본 제공 또는 구매한 도구(사용자 정의 도구도 있습니다.)를 이용해서 윈폼에 쉽게 배치하고 이후 동작에 대한 코드를 기록하는 방법을 사용합니다.
웹이나 다른 언어의 경우 코드로만 컴포넌트들을 배치하는 경우도 있는데 윈폼이 이 경우보다 초기 디자인 작업이 많이 쉬운것 같습니다. 물론 정형화되어 있기에 보다 미려한 UI를 만들고자 하면 한계가 있습니다.
물론 실력이 된다면 Form의 디자인을 코드 베이스에서 변경하고 수정할 수 있는데 인건비가 안나올정도로 많이 힘듭니다.
이정도 할려면 차라리 WPF를 하시는게 좋지 않을까 생각이 드네요.
저도 윈폼만 하다가 WPF도 해봤는데 처음에 xaml로 디자인하는게 익숙하지 않았는데 많은 부분 미려하게 꾸밀 수 있는 요소가 크고 디자이너와 협업할 수 있는 요소가 큰것 같더라고요.
WPF도 많이 해봐야 하겠다 생각이 들었네요.
여튼 솔루션 탐색기에서 Form1.cs 파일을 클릭해보시면 하위에 Form1.Designer.cs 파일과 Form1.resx 파일이 있습니다.
Form1.Designer.cs 파일이 윈폼의 도구들을 배치하면 자동으로 UI관련 코드들을 개발자가 설정한 속성대로 코드가 만들어 집니다.
마우스로 휙휙 만든 UI는 Form.Designer.cs 파일에 두고 실제 개발자는 Form1.cs에 로직을 기입하면서 작업을 하면 됩니다. Partial Class로 서로 다르지만 같은 작업장이 된것입니다.
디자이너에서 버튼에 대한 이벤트를 작성하고 싶다면 원하는 도구를 더블 클릭하면 자동으로 Form1.cs 파일에 이벤트가 기입이 됩니다.
여기에 원하시는 로직을 입력하시면 됩니다.
방금의 행위로 Form.cs에 이벤트 메서드가 나오는데 이 이벤트를 등록한것은 안보입니다.
어디에 있을까요? 나는 이벤트 등록은 안했는데 이벤트에 대한 메서드는 만들어져서 기입하라고 나오네요?
이벤트 등록에 대한 코드는 바로~ Form1.Designer.cs에 있습니다.
도구를 기입할때는 디자인에 대한 코드만 있고 해당 도구를 더블 클릭해서 이벤트 메서드가 만들어 질때 Form1.Designer.cs에 이벤트 등록에 대한 코드가 자동으로 작성됩니다.
현재 Btn_ClearLog 도구는 속성들만 가지고 있습니다.
더블클릭을 하여서 메서드를 생성하겠습니다.
더블 클릭을 하면 Form1.cs의 코드 입력으로 가게되고 Btn_Clear_Click이라는 메서드가 자동으로 생겨있는 것을 확인할 수 있습니다.
그리고 아까 확인한 Form1.Designer.cs로 가서 보게 되면
위와 같이 이벤트 등록이 되어 있는 것을 확인 할 수 있습니다.
위와 같은 구조로 인하여 코드 작성 부분에서 도구에 대한 이름을 변경안하여서 클릭 메서드에 대한 내용을 그냥 수정하거나 삭제한다면 코드 작성 영역의 메서드가 디자인 영역에는 클릭 이벤트에 대한 처리가 등록이 되어 있어 오류가 나는 것입니다.
해결 방법은 간단합니다. Form1.Designer.cs에서 해당 이벤트에 등록에 대한 코드를 삭제하던지 아니면 메서드명을 일치시켜 주시면 됩니다.
수정을 하시고 저장하고 다시 Form1.cs[디자인]으로 가보시면 오류가 사라진것을 확인 할 수 있습니다.
초기에 UI 레이아웃 잡고 수정하시다가 이름을 안바꿔서 그냥 삭제하여 오류가 발생할까봐 한번 설명하였습니다.\
이후 작업하시는데 많은 도움이 되시기를 바랍니다~
이제 본격적으로 GPIB 코드 작업 들어가야 겠네요.
'개발' 카테고리의 다른 글
CR(Carriage Return) LF(Line Feed)란? (47) | 2024.11.13 |
---|---|
C#으로 하는 GPIB 통신 -4- (12) | 2024.11.13 |
C#으로 하는 GPIB 통신 -3- (4) | 2024.11.11 |
C#으로 하는 GPIB 통신 -2- (11) | 2024.11.10 |
C#으로 통신하는 GPIB 프로토콜 (5) | 2024.11.09 |