본문 바로가기

윈도우프로그래밍20

[C#] PictureBox에 이미지 표시하기 (feat. MemoryStream) 아래 구문은 PictureBox 컨트롤에 이미지를 표시하기 위한 방법 중 가장 쉽기 때문에 일반적으로 많이 사용되는 방식이다. 하지만, 이러한 방식은 파일을 PictureBox가 점유하고 있기 때문에 삭제나 이동에 문제가 발생한다. pictureBox.Image = Image.FromFile(file_name); 메모리스트림을 이용하여 로딩하면 위와 같은 문제없이 이미지를 표시할 수 있다. pictureBox.Image = LoadBitmap(@"d:\directory\file_name.jpg"); /// /// 비트맵이미지를 메모리스트림으로 로딩 /// /// /// public Bitmap LoadBitmap(string file_name) { if (System.IO.File.Exists(file_.. 2021. 5. 23.
[C#] ZedGraph 에서 Logarithmic Scale 주파수 축에 대한 시작 / 종료 주파수를 항상 나타나게 하는 방법 필자는 그래프를 생성하기 위해 아주 가끔 GDI+를 이용하기도 하지만, 주로 ZedGraph를 이용한다. 그런데, 문제는 Log scale로 설정한 X축의 값이 10의 거듭제곱으로 표시되는 Major Tick만 표시가 되고, Minor Tick에는 표시되지 않는다. 이는 아래 그림과 같이 Major Tick이 그래프의 중간에만 표시되거나, 그래프를 확대하여 Major Tick이 그래프의 범위에 있지 않는 경우 X축의 값이 전혀 표시되지 않는 등의 문제를 초래한다. 이에 관한 다른 사용자의 공식 포럼의 질문이 있었고, 개발자는 불가능 하다고 답변 한 바 있다. 이에 궁여지책으로나마 시작, 종료 값만이라도 표시할 수 있는 방법을 공유하고자 한다. 아래와 같이 선언되는 이벤트 핸들러를 이용한다. public .. 2020. 8. 24.
[C#] 반복루프를 사용하지 않고 배열 및 리스트의 각 원소를 연산하는 방법 람다식과 LINQ 질의를 사용하면 반복루프를 구성하지 않고 간단하게 연산이 가능하다. 성능은 반복루프에 비해 다소 떨어질 수 있지만, 개발 및 유지관리 측면에서의 효율성은 LINQ 가 앞선다고 볼 수 있다. int[] number = { 1, 2, 3, 4, 5 }; var result = number.Select(n => n * 10); 2020. 8. 23.
[C#] 구조체 리스트 항목 검색하기 [구조체 및 리스트 선언] public struct TestFailed { public DateTime TestDate; public string Tester; public string TDK_Item; public string Customer_Name; public string Customer_PartNo; public string LotNo; public string TestItem; public string SampleNo; public string CellName; public double Value; } List TestFailedList = new List(); [리스트 검색] List test_failed_list = new List(); test_failed_list = TestFailed.. 2020. 6. 26.
[VB] 구조체 리스트 항목 검색하기 [구조체 및 리스트 선언] Public Structure TestFailed Public TestDate As Date Public Tester As String Public TDK_Item As String Public Customer_Name As String Public Customer_PartNo As String Public LotNo As String Public TestItem As String Public SampleNo As String Public CellName As String Public Value As Double End Structure Public TestFailedList As List(Of TestFailed) [리스트 검색] Dim test_failed As New Li.. 2020. 6. 26.
Visual Studio 2017 탐색 모음 표시 노트북을 교체한 후, C# 소스를 열었을 때는 몰랐는데, VB 소스를 열다보니 탐색 모음이 표시되지 않는다. "탐색 모음"을 표시하기 위한 방법을 알아본다. Microsoft Docs 의 내용을 요약하면 아래와 같다. Visual Studio의 도구 > 옵션 > 텍스트 편집기 > 모든 언어 (또는 Basic) > 에서 "탐색 모음" 항목을 체크하면 표시된다. 이렇게 하고나면 "탐색 모음"이 나타난다. 2018. 11. 14.
Visual Studio Installer HRESULT -2147024769 에러 해결방법 Visual Studio Installer 로 작성된 설치 프로그램 실행 시 HRESULT -2147024769 메시지가 나온다. 이 에러메시지는 설치 패키지에 포함된 dll의 속성 중 Register 속성이 vsdrfCOMSelfReg 으로 디폴트 설정되기 때문에 설치관리자가 이 dll 파일들을 자동으로 COM Server에 등록하려고 하기 때문에 발생한다. 해당 속성을 아래와 같이 vsdrfDoNotRegister 로 변경하여 다시 패키징 하면 해결 된다. 2018. 6. 7.
"Resources" 매개 변수에 두 번 이상 지정했습니다. 오류 며칠 전 까지 잘 컴파일 되던 솔루션에서 갑자기 다음과 같은 오류가 발생하며 빌드가 되지 않는다. "Resources" 매개 변수에 두 번 이상 지정했습니다. "Resources" 매개 변수는 중복 항목을 지원하지 않습니다 역시 구글링을 통해 찾은 해결 방법은 다음과 같다. 필자의 경우, frmMeasure.lg.resx로 인해 문제가 발생했으나, 이런 파일을 생성한 적도 없어 정확한 원인은 알 수 없었다. 위 방법은 프로젝트.vbproj (C#의 경우 프로젝트.csproj) 파일을 메모장으로 직접 수정해도 된다. 다만 메모장의 가독성이 매우 떨어지기 때문에 추천하지 않는다. 2018. 5. 24.
[C#] DataGridView의 ComboBoxColumn 값이 변경된 후 이벤트 처리하기 /// /// StepUnit ComboBox의 EditingControl 이 나타날 때 dgvFreqSubrange_ /// ComboSelectionChanged 이벤트 핸들러를 동적으로 링크시키기 위한 루틴 /// /// /// private void dgvFreqSubrange_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (dgvFreqSubrange.CurrentCell.ColumnIndex == colFreqSubrange_StepUnit.Index & e.Control is ComboBox) { try { ComboBox cboStepUnit = e.Control as ComboB.. 2018. 3. 19.
[C#] 윈도우 애니메이션 효과 활성 / 비활성 using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential)] public struct ANIMATIONINFO { public uint cbSize; public int iMinAnimate; }; [DllImport("user32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref ANIMATIONINFO pvParam, uint fWinIni); public static uint SPIF_SENDCHANGE = 0x02; p.. 2018. 3. 17.
[C#] MenuItem의 MdiList 속성이 어디로 갔나? 오랜만에 MDI (Multiple-document interface) 어플리케이션을 작성 중이다. 예전에 개발할 때는 MenuItem의 MdiList 속성을 True로 설정하면, MDI Child 폼의 목록이 뜨도록 할 수 있었다. 그런데, 아무리 찾아봐도 현재버전에는 보이지 않는다. 해답은 MenuStrip의 MdiWindowListItem에 있었다. 아래 그림과 같이 MdiWindoListItem 속성에서 MdiChild 리스트를 표기할 ToolStripMenuItem을 선택해 주면된다. 2018. 1. 30.
[C#] 배열 또는 리스트에서 중복값 제거 Enumerable.Distinct 메서드 사용 1) Array double[] a = new double[] { 1, 100, 100, 200, 100, 300, 400, 500, 600 }; a = a.Distinct().ToArray(); 2) List List b = new List(); b.AddRange(new double[] { 1, 100, 100, 200, 100, 300, 400, 500, 600 }); b = b.Distinct().ToList(); Microsoft Develper Network 2018. 1. 27.
Visual Studio 2017 탐색모음 (Navigation bar) 표시 방법 Visual Studio Community 2017 버전에서 탐색모음 (내비게이션 바, Navigation bar) 표시 방법을 확인해 본다. 기본 설치상태에서 C#의 경우 아래 그림과 같이 네비게이션 바가 표시되는데, 유독 VB에서는 표시되지 않아 불편했었다. 표시 하는 방법을 확인해 본다. 1) C# 표시 상태 2) VB 표시 상태 3) 도구 -> 옵션 메뉴 클릭 4) 텍스트 편집기 -> Basic -> 일반 선택 "탐색 모음" 옵션이 언체크 되어 있다. 5) "탐색 모음" 옵션을 체크한다. 6) 내비게이션 바가 표시된다. 7) 확인 완료 2018. 1. 24.
Windows Installer 비정상 동작 시 조치 방법 필자의 PC에는 Visual Studio Community 2013과 2017 이 동시에 설치 되어 있었다. 이전 포스팅에서 언급한 2017 버전에서의 Windows Installer 2017 을 설치한 후 설치본을 빌드하는 도중 실행하지도 않은 Windows Installer 2013이 설치되고, 해당버전의 Installer가 실행되며 "설치 준비 중..." 상태가 지속되고, Visual Studio는 응답을 하지 않는 상황이 발생되었다. 재부팅과 함께 수 차례 재시도 했으나 동일한 상황만 반복된다. 또다시 구글링... (ㅡ,.ㅡ) 함께 설치되어있는 Visual Studio 2013을 삭제하고 나니 정상적으로 설치본이 빌드된다. 이어서, 설치프로젝트의 팝업메뉴를 통해 "설치" 하니, 정상적으로 설치마법.. 2018. 1. 17.
InstallShield Limited Edition은 더 이상 Visual Studio Community Edition을 지원하지 않는다. 프로그램 개발에 사용해 오던 Visual Studio 2008에서 배포용으로 기본 제공되던 Window Intaller를 잘 사용해 왔으나, Visual Studio 2013으로 변경 한 이후, IntallSheild Limited Edition을 제공해서 기존 프로젝트의 판올림시 배포 프로젝트를 일일이 다 변경해야만 했다. 최근에 Visual Studio Community 2017을 사용하여 프로그램을 개발하고 있는데, 배포 프로젝트를 생성하려는 도중, 아래와 같이 "설치 및 배포" 노드가 나타나지 않아 당황스럽다. 다시 구글링... MSDN 커뮤니티에서 관련 게시물이 발견되었으니, 그 내용은 "InstallSheild Limited Edition은 더이상 VS Community Edition을 지원하.. 2018. 1. 17.