Language/C# (10)

C# 마우스 드래그 이벤트로 폼 이동하기

머리말 프로그래밍 언어를 모두 암기할 수 없다. 본인도 주로 필요할 때마다 검색을 통해 문제를 해결하면서 개발한다. 하지만 검색 결과 조금씩 다른 결과를 가리킨다면 혼란스럽다. 본 포스팅에서는 C# 개발환경에서 마우스 드래그로 폼을 이동시키는 방법에 대해서 설명하는데, 불 필요하게 전역 변수를 사용하지 않는 방법으로 소개한다. 가장 최적화된 방법이라 생각된다. 마우스 드래그로 폼 이동하기 본인의 경우 폼의 타이틀 영역을 비활성화 처리한 뒤, 모든 영역을 드래그했을 때 폼이 이동시키도록 개발을 진행하고 있었다. 그렇기 때문에 메인 폼에 MouseDown, MouseMove 두 개의 이벤트만 사용해서 구현했다. 추가된 각 이벤트에 각각 기능을 코딩해주면 되는데, MouseDown 이벤트에는 현재 마우스의 좌..

Language/C# | 2021. 3. 29. 08:00

C# 트레이 아이콘(Tray Icon) 생성 방법

머리말 컴퓨터에 지속적으로 상주해서 실행되는 프로그램을 개발하다 보면 아이콘이 트레이 영역에 표시되는 게 좋다고 판단되는 경우가 있다. 이를테면 보안 프로그램이나 시스템 모니터링과 같은 프로그램을 예로 들 수 있다. 그러한 프로그램은 대다수 프로그램 화면을 직접 열어보는 경우가 흔치 않으며, Windows 하단의 작업 표시줄에 지속적으로 노출되면 더욱 불편할 따름이다. 본 포스팅에서는 C# 개발 환경의 프로그램을 트레이 영역에 노출시키는 방법을 설명하도록 한다. C# 개발환경은 '디자인 폼'을 이용하는 스타일과 '직접 디자인을 코딩'하는 스타일로 구분할 수 있는데, C#의 강점 중 하나인 강력한 디자인 퍼포먼스를 고려해 디자인 폼을 이용하는 방법으로 설명한다. 직접 코딩하는 방법도 나쁘진 않지만 제공되는..

Language/C# | 2021. 3. 28. 03:11

C# JSON 파싱(parsing): Newtonsoft 및 System.Text.Json

머리말 본 포스팅이 C# 개발환경에서 JSON 사용방법을 설명하는 마지막 포스팅이다. 첫 번째 포스팅에서는 JSON의 배경과 구조에 대한 설명, 두 번째 포스팅에서는 직렬화 및 역직렬화에 대한 설명을 담았다. 필요하다면, 아래의 '도움이 될만한 포스팅' 영역에 링크를 남겨놓았으니 참고하길 바란다. 본 포스팅에서는 Newtonsoft.Json 라이브러리와 System.Text.Json 라이브러리에 대해 간략한 사용 방법을 설명한다. # 도움이 될만한 포스팅 C# JSON 파싱(parsing): 배경과 구조 이해 C# JSON 파싱(parsing): 직렬화 및 역직렬화 개념 C# JSON 파싱(parsing): Newtonsoft 및 System.Text.Json Newtonsoft.Json 라이브러리 Ne..

Language/C# | 2021. 3. 21. 07:40

C# JSON 파싱(parsing): 직렬화 및 역직렬화 개념

머리말 C# 개발환경에서 JSON을 다루기 위한 두 번째 포스팅이다. 첫 번째 포스팅에서는 JSON 배경과 구조에 대해서 설명했는데, 필요하다면 상단의 '도움이 될만한 포스팅'에 링크를 남겨 놓았으니 참고 바란다. 본 포스팅에서는 C# 환경에서 널리 사용되는 JSON 라이브러리를 비교한 뒤, 직렬화 및 역직렬화의 개념에 대해서 설명하도록 한다. 라이브러리 사용에 앞서, 먼저 어떤 라이브러리를 사용해야 될지 고민이 될 수 있다. 자신의 소중한 프로그램에 사용할 라이브러리인데, 아무거나 대충 사용할 수 없다. 대표적으로 사용되는 라이브러리는 두 가지 정도만 기억해도 좋다. NewtonSoft에서 배포하는 Newtonsoft.Json 라이브러리와 .NET Core 개발팀에서 배포하는 System.Text.Js..

Language/C# | 2021. 3. 21. 07:09

C# JSON 파싱(parsing): 배경과 구조 이해

머리말 본 포스팅에서는 C# 개발 환경에서 JSON 데이터를 다루는 방법에 대해 자세하게 소개한다. 다른 블로그의 내용만으로도 어느 정도 자신이 원하는 기능은 구현할 수 있다. 하지만, JSON의 개념을 먼저 이해하지 못한다면 라이브러리를 선택함에 있어서 자유롭지 못하고 특이한 예외 상황에 유연하게 대응하는데 한계가 있다. 그렇기 때문에 총 세 번의 포스팅으로 JSON에 대한 개념적인 내용을 소개할 것이며, 먼저 본 포스팅에서는 JSON에 대한 배경과 구조에 대한 내용을 소개하도록 한다. 만일, 사용 방법에 대한 요점만 필요하다면 상단의 '도움이 될만한 포스팅'의 세 번째 포스팅으로 건너뛰어도 좋다. 수십 년 동안 시스템 간 데이터를 이동하기 위한 데이터 포맷으로 XML을 사용해왔다. XML은 현재도 많..

Language/C# | 2021. 3. 21. 06:43

C# 클립보드(CliepBoard) 복사 및 가져오기: 텍스트, 이미지

머리말 아마도 본인은 처음으로 클립보드를 복사하는 기능을 접한건, 어느 웹사이트에서 목격했던 것으로 기억한다. 지정된 문자열을 클립보드로 자동 복사해준다니 고맙게 생각했었다. 그 후 시간이 흐르고 C# 라이브러리에서도 클립복사 기능을 제공할지 의문이 들었다. 생각보다 너무 쉽게 처리한 클립보드 복사 기능을 본 포스팅에서 소개한다. 클립보드 라이브러리 사용하기 아마도 키워드를 몰라서 검색하다 본 포스팅까지 도달했을 것 같다. 설명할 것도 없이 너무 간단하게 처리가 가능하다. 아래의 예제와 같이 처리하면 너무 쉽게 클립보드로 복사하는 라이브러리를 사용할 수 있다. 'System.Windows.Forms'에서 제공하는 라이브러리를 사용할 수 있는데, C# 프로그래밍에서 기본으로 사용되는 라이브러리라 Clipb..

Language/C# | 2021. 3. 18. 00:34

[C#] WebClient Timeout 설정 방법

머리말 C# 환경에서 개발하다 보면 HTTP 웹 요청을 코딩하는 경우가 발생한다. 웹 객체의 종류는 많지만 지원하는 함수와 프로퍼티는 제각각이라 모두 외우고 있기는 쉽지 않다. 본 포스팅에서는 WebClient 객체에서 Timeout 프로퍼티를 설정하는 방법에 대해서 소개한다. 최대한 간결하고 가볍게 구성하기 위해 고민을 많이 해봤지만, 소개하는 방법이 최선의 방법이라 생각된다. WebClient 객체에서 Timeout 설정 방법 웹을 이용하는 클라이언트에서 주로 사용되는 기능을 모아놓은 것이 WebClient이며, 그렇기 때문에 HttpWebRequest, HttpWebResponse 클래스를 직접 사용하는 것보다 무겁다. 이유는, WebClient 클래스는 HttpWebRequest, HttpWebR..

Language/C# | 2021. 3. 7. 10:33

C# / ini 파일 읽기 및 쓰기: kernel32 사용하지 않고

프로그램을 개발하다 보면 사용자 환경을 저장하는 설정 파일을 읽거나 쓰는 경우가 발생한다. 그중 많이 사용되는 방법 중 하나가 .ini 파일을 사용하는 방법이며, .ini 파일은 일정한 문법적인 구조에 따라 작성된다. 물론, 아직도 레지스트리에 프로그램의 설정을 저장하는 경우도 많이 사용되지만, Window 운영체제의 보안 강화로 인해 레지스트리의 접근은 더 이상 자유롭지 못하다. 이러한 이유로 본인은 .ini 파일을 선호한다. 1. kernel32 사용하는 방법 C# 언어로 프로그램을 개발하는데 있어서, WIN API를 사용하는 것은 반갑지 않다. 하지만 무작정 피해 갈 수도 없는 노릇이다. 본인은 가급적 피해 갈 수 있는 방향으로 개발을 하지만 어쩔 수 없는 경우도 존재한다. 먼저 kernel32.D..

Language/C# | 2019. 7. 25. 01:21

[C#] 파일경로 추출하기(파일명/확장자/파일경로)

파일의 전체 경로에서 파일명만 필요한 경우가 있다. 또한 파일의 경로만 필요한 경우도 있다. C#에서는 파일명을 둘러싼 여러가지 경우를 고려해서 유용한 함수를 제공한다. 본 포스팅에서는 파일명과 확장자, 파일 경로를 간단한 함수 호출만으로 구할 수 있는 방법을 소개한다. # 전체 경로 추출 1 2 3 4 5 6 7 8 9 10 11 12 13 using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string filePath = @"C:\Users\wookoa\Pictures\signature.png"; Console.WriteLine(System.IO.Path.GetFullPath(filePath));..

Language/C# | 2019. 2. 25. 02:53

C# as 연산자, is 연산자 사용법

C#에서는 AS, IS 연산자가 존재한다. 형변환을 위해서 탄생한 예약어인데 알아두면 유용한 연산자이며, 타인이 작성한 코드를 무리없이 읽기 위해서도 필히 숙지해야할 연산자 중 하나이다. 본포스팅에서는 AS 연산자와 IS 연산자에 대해서 알아보도록 한다. # AS, IS 연산자의 개념 기본적으로 제공되는 int, bool, string과 같은 타입 외에도, 클래스간 캐스팅 작업이 필요한 경우가 있다. 예를들어 상속관계에 있는 두 클래스에서 자식 클래스는 부모 클래스에 대입될 수 있지만, 부모 클래스는 자식 클래스에 대입될 경우 아래와 같이 오류가 발생한다. "암시적으로 'ConsoleApp1.Program.Wookoa' 형식을 'ConsoleApp1.Program.WookoaTistory' 형식으로 변환..

Language/C# | 2019. 1. 21. 00:24

1