C#
-
WPF BitmapImage 에서 ArgumentExceptionC#/WPF 2019. 10. 14. 11:25
WPF에서 Canvas의 Background 등 ImageBrush를 사용 중 ArgumentException이 발생하면서 "값이 예상범위를 벗어났습니다." or "does not fall within the expected range" 라는 Exception을 발생할 때가 있습니다. 이는 ImageBrush만의 문제가 아니라 BitmapImage를 사용할 때 발생할 수 있습니다. (아래에 참조 링크) BitmapImage는 한 객체당 한 Image만 참조하는 것이 기대되어 있습니다. 그래서 ImageBrush의 ImageSource를 바꾼다던지 하는 방식으로 한 객체에 여러 Image를 할당하려 할 때 발생하게 됩니다. 해법은 그냥 ImageBrush나 ImageSource를 사용하는 해당 객체를 새로..
-
C# DateTime ToString Format (오전/오후 표시)C# 2018. 6. 26. 13:35
※ 블로그를 이전하며 해당 내용을 개선하여 포스팅했습니다. (링크) C#에서 DataTime은 날짜, 시간을 나타낼 때 쓰입니다. 그런데 DateTime을 그냥 ToString() 할 경우 2018-12-18 오후 4:53:02 이런 식으로 연월일 등 모두 표시 됩니다. 이때 필요한 것이 Format 문자열인데요, ToString() 함수에 Format 문자열을 넣어주는 방식으로 설정할 수 있습니다. Format 문자열은 yy MM dd 이런 알파벳 들로 이루어집니다. 자주 쓰이는 것들을 알려드리고, 그 외 여러 Format과 예시들은 MS Docs에 있습니다. y 년 Year M 월 Month d 일 Day H 시간 Hour (24시간 기준) h 시간 hour (12시간 기준) m 분 minute s ..
-
C# Enum 형식 array형으로 변환하기 (for문, foreach문 사용)C# 2018. 6. 20. 11:30
C#에서 Enum 으로 선언한 열거형의 각 요소들의 이름이 필요할 때가 있습니다. 예를 들어 enum 계이름{도, 레, 미, 파, 솔, 라, 시} 가 있다면 List, 혹은 ComboBox 등에 도,레,미 ... 를 Item으로 넣어주고 싶을 때 입니다. 이 때 각각 요소들을 Item으로 갖는 Array를 만들어주는 방법이 있습니다. 1Array arr = Enum.GetValues(typeof(계이름));cs Enum의 GetValues 를 사용하는 것입니다. 이 Array는 일반 Array형과는 달라서 []로 접근할 수 없습니다. 사용법입니다. 1arr.GetValue(index);cs 다음과 같이 GetValue를 이용해야 하며, 반환 값은 object 입니다. 혹시 값을 바꾸어야 한다면 arr.S..
-
WPF 타이틀 바 바꾸기(Title Bar Custom)C#/WPF 2018. 4. 27. 11:30
WPF로 개발을 하다 보면 상단의 ㅡㅁX가 있는 타이틀 바의 스타일을 바꿔야 할 때가 있습니다. 저도 이와 관련해서 며칠 찾아보았지만, 주로 Mahapps.metro(링크)를 사용하고, 직접 다른분께서 만드신 내용은 많이 없더라구요. 우선은 기본적으로 Window의 Title Bar는 색을 바꾼 수 없습니다. 그래서 바꾸는 법으로 WindowChrome이 있지만, .NET Framework 4 이상에서 지원되고, .NET Framework 4.5 이상부터 기본으로 포함되기에 혹 낮은 버전의 .NET을 써야 한다면 사용하실 수 없습니다. 그리고 WindowChrom을 써도 원하는대로 안나오거나 마음에 들지 않을 때가 많더라구요 ㅡㅁX버튼이 안보인다던지 제가 WindowChrom에 대해서도 찾아 보았는데 좋..
-
WPF 최소화 최대화 종료 버튼 만들기C#/WPF 2018. 4. 27. 11:00
윈도우 프로그램들은 기본적으로 가지고 있는 ㅡㅁX 버튼이 있습니다. 이 버튼을 임의적으로 구현해야 할 때가 있습니다. (Custom Title Bar) 사실 기능을 구현하는 것보다 버튼을 그리는 것이 더 복잡..합니다. 먼저 기능을 구현하는 부분입니다. .cs 파일에 추가해 주시면 됩니다. 12345678910111213141516171819202122232425262728private void Maximize_Click(object sender, RoutedEventArgs e){ this.WindowState = (this.WindowState == WindowState.Normal) ? WindowState.Maximized : WindowState.Normal;} private void Close..
-
WPF WindowStyle None 최대화 시 작업 표시줄 보이게 하기C#/WPF 2018. 4. 26. 15:23
WPF에서 WindowStyle을 None으로 설정하고 Maximize를 하면 화면 전체를 가득 채워서 작업 표시줄까지 가리게 됩니다. 이럴 경우에는 MaxHeight를 통해 최대 크기를 제한해주면 작업 표시줄을 가리지 않게 됩니다. 하지만 사용자의 모니터가 여러대이면서 각 모니터의 해상도가 다를 경우에는 모니터마다 MaxHeight를 바꿔주어야 합니다. 먼저 모니터가 1개이거나 모든 모니터의 해상도가 같을 때 MaxHeight를 설정하는 법입니다. 123456public MainWindow(){ InitializeComponent(); MaxHeight = SystemParameters.WorkArea.Height;}Colored by Color Scriptercs 생성자 또는 Loaded 이벤트에서 ..
-
WPF System Menu 불러오기C#/WPF 2018. 4. 26. 11:30
윈도우의 상단 Title Bar를 우클릭 하면 아래와 같은 시스템 메뉴가 나오게 됩니다. 시스템 메뉴를 굳이 위 상단 Title Bar 클릭이 아닌 다른 이유로 불러야 할 때가 있습니다. (Custom Title Bar 등...) WPF 특정 Control을 우클릭 했을 떄 시스템 메뉴를 여는 법에 대해 써보겠습니다. 우선 MouseDown Event Handler가 필요합니다. 저는 Label을 눌렀을 때 뜨도록 하겠습니다. 1cs PreviewMouseDown 과 MouseDown의 차이는 없습니다. 그리고 DLL파일을 Import하야 하기 때문에 using을 씁니다. using System.Runtime.InteropServices; 다음 내용이 필요합니다. 1234567[DllImport("use..
-
C#에서 엑셀파일 저장(쓰기)C# 2018. 3. 30. 11:30
※ 블로그를 이전하며 해당 내용을 개선하여 새로 포스팅했습니다. (링크) C#에서 엑셀 파일을 읽어오는 법에 대해 글을 썼었습니다. ([C#] - C#에서 엑셀파일 읽어오기) 이번에는 C#에서 엑셀 파일을 저장하는 법, 쓰는 법에 대해 쓰려 합니다. 저장하는 방법은 읽는 방법과 유사합니다. 참조파일이 필요합니다. 참조추가 -> COM -> Microsoft Excel 16.0 Object Library (여기서 16.0은 Excel의 버전입니다.) (예. Microsoft Excel 13.0 Object.... 등등) 상단에 using 구문을 추가합니다. using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel; ..