전체 글280 C# UI Thread 에러 발생할 경우 C#에서 UI Thread 오류가 발생할 경우 아래와 같이 하나의 UI가 끝날 때까지 DoEvents() 함수를 호출하고 일정 시간이 지난 후에 UI 변경을 하도록 처리한다. for (int i = 0; i < 10; i++) { System.Windows.Forms.Application.DoEvents(); System.Threading.Thread.Sleep(1); } Tree의 Popup 메뉴로 창을 띄우는 코드를 하는데 Tree가 선택되어 Expand 되는 도중에 ShowDialog가 호출되어 UI Thread 오류가 발생했다. 그래서 Expand가 끝나는 시간까지 DoEvents 함수를 호출하게 한 후에 ShowDialog가 호출되니 오류가 발생하지 않았다. 2023. 2. 13. WinForm안에 있는 WFP 창에서 owner를 지정하는 방법 WFP에서 Owner를 지정할 아래와 같이 사용할 수 있다. Owner = Application.Current.MainWindow; 그런데 WinForm안에 WPF를 이용할 때 WPF의 Dialog Owner를 기존과 같은 방식으로하면 Current가 null 에러가 발생한다. WinForm에서부터 Window Handle을 넘겨 받아 사용할 수도 있지만 아래와 같이 Process에서 Handle을 받아서 처리를 할 수도 있다. WPFTestView dlg = new WPFTestView(); System.IntPtr iMainHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; System.Windows.Interop.Win.. 2023. 2. 8. C# split 사용 방법 https://learn.microsoft.com/ko-kr/dotnet/csharp/how-to/parse-strings-using-split String.Split을 사용하여 문자열 나누기(C# 가이드) Split 메서드는 구분 기호 세트에서 분리된 문자열 배열을 반환합니다. 문자열에서 부분 문자열을 추출하는 간편한 방법입니다. learn.microsoft.com char[] delimiterChars = { ' ', ',', '.', ':', '\t' }; string text = "one\ttwo three:four,five six seven"; System.Console.WriteLine($"Original text: '{text}'"); string[] words = text.Split(del.. 2023. 1. 19. CODESYS Simulator password 초기화 방법 CODESYS를 설치하면 아래와 같은 Simulator 폴더가 존재한다. C:\ProgramData\CODESYS\CODESYSControlWinV3x64 폴더안에 모든 파일을 삭제하면 password가 초기화 되어 다시 처음부터 입력하는 창이 표시된다. 폴더를 삭제하기 위해서는 Stop PLC를 메뉴를 눌러 시뮬레이터가 멈춘 한 후에 삭제가 가능하다. 삭제 후 실행을 하면 아래와 같이 새로 password를 입력하는 창을 확인할 수 있다. 2022. 12. 27. MFC jsoncpp 설치 jsoncpp 를 library 로 만들지 않고 source 와 header 파일을 프로젝트에 포함해서 사용 가능합니다. 1. jsoncpp download download link : https://github.com/open-source-parsers/jsoncpp 2. python를 설치하고, 다운받은 json 폴더의 amalgamate.py 파일 실행합니다. 생성된 dist 폴더를 확인합니다. 3. dist 폴더 이동해서 생성된 파일을 확인합니다. jsoncpp.cpp , json.h, json-forwards.h 파일을 프로젝트에 추가해서 함께 빌드합니다. 2022. 11. 28. C# 구조체 바이너리 파일 읽기 C#에서 구조체 파일을 읽어 처리하는 간단한 예제이다. 구조체 바이너리 파일은 C++ MFC로 제작이 되어 있었다. C++ 구조체는 아래와 같다. typedef struct { TCHAR Name[20]; TCHAR ID[20]; TCHAR Passwd[20]; uint Grade; } stUserInfo; 위와 같은 구조체로 만들어지 바이너리 파일을 C#에서 읽어 클래스 리스트에 넣도록 처리 예정이다. C#에서는 아래와 같은 구조체가 C++ 구조체와 같은 모습니다. [Serializable] [StructLayout(LayoutKind.Sequential)] public struct UserInfo { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] pu.. 2022. 8. 10. CScrollView를 이용한 Image Viewer 예제 JPG, BMP, PNG 등의 이미지 파일을 열어 스크롤이 가능한 화면에서 확대/축소를 하는 예제이다. CScrollView 클래스를 이용하면 Scroll을 계산하지 않아도 된다. 예제는 TabCtrl에 Tab을 5개 만들고 각 탭별로 이미지를 넣고 확대/축소 기능과 함께 이미지를 보는 간단한 프로그램이다. 이미지는 CImage 클래스를 이용해서 읽는다. Viewer 클래스에서 OnDraw()함수에서 확대/축소를 위한 StretchBlt 처리를 한다. CScrollView 클래스를 이용할 경우 OnInitialUpdate()함수에서 SetScrollSizes() 함수를 이용해서 크기를 초기화해야 한다. 그렇지 않으면 Scroll 처리를 위한 Size를 알수가 없어 에러가 발생한다. void ImageVi.. 2022. 7. 27. CXTPPropertyPage OK 버튼 누르고 종료 여부 체크 방법 https://docs.microsoft.com/en-us/cpp/mfc/reference/cpropertypage-class?view=msvc-170 CPropertyPage Class Learn more about: CPropertyPage Class docs.microsoft.com MSDN을 참고하면 된다. 간단하게 설명하면 OK, Cancel 버튼을 누렀을 때 아래 함수가 각각 순서대로 호출이 된다. 먼저 OK버튼을 눌렀을 경우이다. int nCompare = 1; // The default MFC implementation of OnApply() would call OnOK(). BOOL CColorPage::OnApply() { if (nCompare == 2) return FALSE;//c.. 2022. 7. 15. Codejock RibbonBar 예제 및 CXTPControlEdit spin message 예제는 Codejock 설치 경로에 있는 Samples\Ribbon\RibbonControls 프로젝트를 참고 하면 된다. Codejock RibbonBar에 Edit 컨트롤을 올려 놓고 spin 버튼을 추가해서 사용을 해봤다. CXPTControlEdit을 사용하고 RibbonBar에 추가하는 방법은 아래와 같다. CXTPRibbonGroup* pGroupSearch = pTabEdit->AddGroup(ID_GROUP1); CXTPControlEdit* pControlEdit = DYNAMIC_DOWNCAST( CXTPControlEdit, pGroupSearch->Add(xtpControlEdit, ID_EDIT1)); if (pControlEdit) { pControlEdit->SetEditTex.. 2022. 7. 15. 이전 1 2 3 4 5 6 7 ··· 32 다음