본문 바로가기

전체 글

(41)
[WinForm] Invoke() delegate 생성 없이 한 문장으로 간단하게 사용하기 참고하면 좋은 C# Solution의 다른 글 [C#] delegate와 delegate 체인 delegate(델리게이트)는 C++의 함수 포인터와 비슷한 기능을 하는 C#의 기능으로, '대리자'라는 의미처럼 메서드를 대신 호출해주는 기능을 한다. 메서드를 대신 호출해주는 기능이 왜 필요할까? 사 cs-solution.tistory.com [WinForm] 크로스 스레드(Cross Thread) 문제 해결 WinForm에서 Thread를 사용해 폼의 컨트롤을 갱신하려고 시도하면 크로스 스레드 예외가 발생한다. 이는 컨트롤을 생성해 관리하는 스레드는 메인 스레드인데, 사용자가 생성한 외부 스레드에서 메 cs-solution.tistory.com Thread에서 Form에 있는 Control의 값을 변경하려..
[C#] FileInfo 클래스로 파일 정보 확인 FileInfo 클래스는 파일의 정보를 제공하는 클래스이다. System.IO 네임스페이스에 선언되어 있으므로 FileInfo 클래스를 사용하기 위해 다음과 같이 네임스페이스를 추가한다. using System.IO; FileInfo 클래스의 인스턴스를 생성하기 위해 생성자에 정보를 확인하고자 하는 파일의 전체 경로를 인자로 넘긴다. 반드시 실제로 존재하는 파일의 경로를 지정할 필요는 없다. var finfo = new FileInfo("Test.txt"); FileInfo의 여러 가지 기능들을 사용해보자. 1. Exists 파일이 존재하는지의 여부를 나타내는 속성이다. 파일이 존재한다면 true이고, 존재하지 않는다면 false이다. var finfo = new FileInfo("Test.txt"); ..
[C#] StreamReader와 StreamWriter로 파일 읽기, 쓰기 C#에서 파일을 읽고 쓰기 위한 스트림으로 StreamReader와 StreamWriter를 사용할 수 있다. 이 클래스들은 System.IO 네임스페이스에 선언되어 있으므로 사용하기 위해서는 System.IO를 using 해줘야 한다. using System.IO; 1. 파일 읽기 파일을 읽기 위해서 StreamReader를 사용한다. 파일 경로를 통해 새로운 StreamReader 개체를 생성하자. void ReadFile(string path) { var sr = new StreamReader(path); } StreamReader의 생성자에 들어가는 path는 파일의 경로와 파일명(파일 이름 + 확장자)을 포함하는 전체 경로여야 한다. (단, 파일이 실행 프로그램(*.exe)과 같은 경로상에 존재..
[WinForm] Drag & Drop으로 파일 가져오기 파일을 마우스로 끌어서 WinForm의 RichTextBox 컨트롤에 가져다 놓으면 파일을 읽어서 내용을 RichTextBox에 출력해주는 프로그램을 만들어본다. 기본적으로 WinForm의 컨트롤은 Drag&Drop에 대한 처리가 구현되지 않았기 때문에 아래와 같이 파일을 가져다 올리면 🚫와 같은 모양으로 마우스 커서가 바뀌고, 파일을 놓아도 아무 일도 발생하지 않는다. Drag&Drop 이벤트를 구현하기 위해 몇 가지 단계를 거친다. 1. Drag&Drop을 처리할 컨트롤에서 AllowDrop 속성을 true로 설정해준다. AllowDrop 속성은 컨트롤에서 끌어서 놓기 작업을 수행할 수 있는지의 여부를 나타내는 속성이다. 만약 AllowDrop 속성이 속성 창에서 보이지 않는다면, 코드상에서 직접 A..
[C#] using 구문 사용법 using 키워드는 단순히 네임스페이스를 임포트할 때 뿐만 아니라 다른 용도로도 사용이 가능한데, using의 유용한 두 가지 기능을 소개한다. 1. 별칭 선언 using 키워드를 사용해 특정 타입의 별칭을 선언할 수 있다. 이는 c나 c++의 typedef와 유사하다. using Element = System.Int32; class Program { static void Main(string[] args) { Element element = 15; Console.Write(element.ToString()); } } 그다지 사용될 일이 없어보여도 은근히 사용하면 유용할 경우가 생긴다. 가령 아래와 같이 여러 개의 클래스가 중첩되어 있는 상황에서 내부 클래스를 사용 및 접근하기 위해 외부 클래스의 이름을..