Programming/C#22 C# 윈도우 화상 키보드(OSK) 실행 및 종료 방법 (Win32 API 사용) 서론 태블릿 환경에서 개발 중 텍스트박스에서 PasswordChar 속성을 먹였을 경우 패스워드를 입력할 때 키보드 입력창이 안올라오는 현상을 볼 수 있다. 필자는 이 경우 윈도우에 내장되어있는 화상키보드를 실행하여 처리하였다. 실행방법에 대해 알아보자. 실행 및 종료 방법 실행 방법1 (비추천) Process p = new Process(); p.StartInfo.FileName = "C:\\Windows\\System32\\osk.exe"; p.StartInfo.Arguments = null; p.StartInfo.WindowStyle = ProcessWindowStyle.Normal; p.Start(); System.ComponentModel.Win32Exception (0x80004005): 지정.. Programming/C# 2022. 4. 25. C# 사설IP와 공인IP 구하는 방법 (GetHostEntry / WebClient 사용) 서론 이번글에서는 사설과 공인ip 를 구하는 방법에 대해 정리해보려한다. 보통 작업을 할 때 로컬에서는 사설, 외부에서는 공인으로 작업하게되는데 상황에 맞게 필요한 부분만 떼어내어 사용하면 될 것 같다. 필자같은 경우는 공인IP를 추출하고 입력해줘야 하는 일이 생겨 사용한 케이스였다. 소스 static void Main(string[] args) { Console.WriteLine("사설 IP : " + GetInternalIP()); Console.WriteLine("공인 IP : " + GetPublicIP()); Console.ReadKey(); } public static string GetInternalIP() { var host = Dns.GetHostEntry(Dns.GetHostName().. Programming/C# 2022. 3. 31. C# 네트워크 통신 연결 상태 확인 하는 방법 (Ping / NetworkInterface 활용) 서론 보통 비투비간 프로그램 연동을 하기위해 만들어진 프로토콜에는 기본적으로 상태체크를 한다. 이러한 상태체크는 정해진 주기마다 보내는 폴링방식으로 확인할 수도 있고 또는 연결과 끊김에 대해서 이벤트를 발생시켜서 관리하는 등 여러 가지 방법으로 체크를 한다. 이번 글에서는 통신이 확립되기 전 본인의 네트워크 상태와 지정한 IP의 통신 상태를 얻어올 수 있는 방법에 대해 소개하려한다. 참고로 필자는 정해진 프로토콜 없이 해당 장비에게 상태체크를 해보기 위해 구현하였다. 소스 static void Main(string[] args) { Console.Write(IsCheckNetwork()); Console.ReadKey(); } private static bool IsCheckNetwork() { bool.. Programming/C# 2022. 3. 31. C# Datagridview 특정 행, 열의 색상 바꾸는 방법 서론 이번 글에서는 Datagridview에서 CellFormatting 이벤트를 사용하여 특정 행,열의 색상을 바꾸고 싶을 때 사용하는 방법을 소개하려한다. 방법 //ToolBox 설정으로 안할 시 동적으로 이벤트 생성 Datagridview1.CellFormatting += Datagridview1_CellFormatting; //CellFormatting Event private void Datagridview1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if(e.ColumnIndex == Datagridview1.Columns.Count - 1) { e.CellStyle.Font = new Font("a고딕15",.. Programming/C# 2022. 3. 29. C# DNS 또는 IP를 이용한 Socket IP 설정 방법 (IPAdrress / IPEndPoint 설정) 서론 이번 글에선 C#에서 tcp/ip 통신 간 Server, Client의 Socket ip를 dns를 이용한 IPEndPoint를 설정하는 방법에 대해 정리하려한다. 평소 사용했던 IPEndPoint 설정 방법 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000); 위 처럼 보통 Socket IP를 설정할 때 사용했던 소스인데, ip에 dns로 설정하니 IPEndPoint를 못찾는 에러가 발생했다. DNS와 IP를 둘다 호환할 수 있는 방법 string dns = "www.naver.com" //임시로 네이버로 잡았고 필요에 따라 dns 쓰면 됨. IPAddress bnetServerIP = Dns.GetHostAddresses(".. Programming/C# 2022. 3. 18. C# Invoke와 BeginInvoke의 차이점 (목적 / 정의 / 사용 방법 / 예제) 서론 이번 글은 Winform Application에서 스레드 환경을 구성할 때 사용하는 기술인 Invoke와 BeginInvoke의 정의와 차이점에 대해 알아볼 것이다. 우선 해당 글을 작성하기 앞서 스레드를 이용하여 UI를 조작할 때 발생하는 크로스 스레드의 글과 관련 있으니 이전에 작성한 크로스 스레드 해결 방법의 글을 참고하고 해당 글을 읽으면 더 이해하는데 도움이 될 것 이라 생각한다. Invoke & BeginInvoke 목적 UI 컨트롤박스를 생성하게 되면 내부 스레드가 자동으로 생성되는데 별도의 스레드를 생성하여 해당 컨트롤 박스에 접근하려 하면 서로 다른 스레드가 하나의 컨트롤 박스 객체에 접근을 하게 되는데, 이 때 교착상태(크로스 스레드)가 발생하여 Invoke 또는 BeginInvo.. Programming/C# 2022. 2. 18. C# 박싱과 언박싱이란? (개념 / 예제 / 사용 이유) 서론 이번 글에서는 평소 프로그래밍을 할 때 몰라도 개발은 가능하지만 프로그램에서 사용되는 메모리가 많거나 메모리 관리가 필요하다면 필히 알아야 하는 박싱과 언박싱에 대한 내용을 정리해 볼 것이다. 추가적으로 변수를 사용함에 있어서 알아야하는 값 타입과 참조 타입에 대해서도 정리해볼려한다. 값 타입과 참조 타입이란? 1. 값 타입 (Value Type) 값 타입은 스택영역에 저장한다. 값 타입은 Object를 상속받은 System.ValueType을 상속받은 구조체이다. ex) int => System.Int32로 정의 되며, 상속 관계는 Object ->ValueType -> Int32 순 데이터에 직접 값이 저장된다. 2. 참조 타입(Reference Type) 힙에 저장된다. 모든 타입의 Base .. Programming/C# 2022. 1. 16. C# .Net Framework와 .Net Core 5.0 어셈블리(dll) 참조하는 방법 서론 이번 원격 프로그램을 만드는 프로젝트를 진행 중 WPF의 자동화 어셈블리들을 추가하는 과정중에 설정 문제가 발생했다. 내가 사용하고싶은 참조는 System.Windows.Rect의 속성이였고 해당 속성을 사용하기 위해서는 WindowsBase를 참조해야했다. System.Windows.ResourceDictionary, System.Windows.Application.Current, System.Windows.Point 등 속성을 가진 using System.Windows을 참조하고싶다면 어떻게 해야할까? 방법은 간단하다. 솔루션 탐색기 - 프로젝트 더블 클릭 - csproj에서 true줄 추가 - 끝 해당 방식을 캡쳐 이미지로 간단히 정리해보겠다. 설정 방법 1. 솔루션 탐색기에서 프로젝트(원격제.. Programming/C# 2022. 1. 6. C# Properties.Settings.Default의 설정 값은 어디에 저장이 될까? (app.config 관리) 서론 나는 여지껏 App.config에 값을 관리할때 Properties.Settings.Default.Save()를 하면 app.config에 적용이 되어 값이 관리되는줄로알고 해당 문법을 사용해왔었다. 그런데 !! 최근에 config에 값을 수정한 후에 해당 .exe파일과 .config파일을 다른 곳에 옮겨서 사용해보니 수정한 값이 없어지고 처음 설정한 초기 기본값으로만 잡혀있는 것이였다. 당황감속에 config파일을 열어봤다. 실행경로에 있는 config에 수정한 값들이 하나도 적용이 안되어 있는 것을 마주했다.. 난 당연히 Save()하고 난 뒤에 프로그램을 껐다켜도 저장이 되어있기에 app.config에 저장이 되어 관리가 되고있겠지란 생각을 하고 사용해왔는데 너무 당황스러웠다. 이것을 어떻게 .. Programming/C# 2022. 1. 6. [VisualStudio] .net 5.0 종속성에 어셈블리(dll) 추가가 안될 때 !!! 서론 없이 어떤 문제 발생 내용과 어떻게 해결했는지 알아보자. 문제 발생 내용 클래스 라이브러리에서 System.Window.Form.dll 을 참조 할려고 했는데 종속성에서 추가하면 자꾸 이상한 문자가 반환되고 참조가 안됐었다. (2-1 이미지 참고) 해결 우선 종속성에서 dll추가를 찾아보기를 눌러서 Microsoft 폴더에서 해당 dll 검색하여 추가하니 정상작동. .net 5.0에서 기존 솔루션 탐색기에 참조라고 있던 것이 종속성으로 변경하였고, 해당 종속성에 기존 어셈블리(dll)을 추가할려고 하면 아래의 경로로 들어가서 추가할 dll 검색하여 추가해주면 된다. 아래 이미지 방식대로 종속성에서 COM 에서 검색해서 추가하면 자꾸 이상한 문자만 나오고 추가가 안되서 애좀 먹었었다. 문제 발생 ! .. Programming/C# 2022. 1. 5. C# 크로스 스레드(Cross Thread)란? (에러 발생 이유 / 해결 방법) 서론 Winform에서 스레드 환경을 구성해서 폼을 제어하다보면 아래의 사진과 같은 크로스 스레드 에러가 빈번하게 발생하는것을 확인 할 수 있을 것이다. 에러 내용 : 크로스 스레드 작업이 잘못되었습니다. 'Textbox' 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스 되었습니다. 에러가 발생하는 이유 ? 폼 구동 시 실행되는 하나의 쓰레드에서 Winform 컨트롤을 관리하게 되는데 해당 특정 스레드가 관리하고 있는 컨트롤을 다른 스레드가 액세스하였을 때 발생한다. 다시 말하면 winform 컨트롤을 생성한 스레드가 아닌 다른 스레드가 속성을 바꾸는 작업을 요청했을 때 크로스 스레드 예외가 발생하는 것이다. 근데, 크로스 스레드는 특이한게 Debug모드에서만 실행되고 Release모드에서는 실.. Programming/C# 2021. 12. 29. C# DataTable의 LINQ식을 이용한 Join 방법 정리 (Datatable left Join / Inner Join) 서론 이번 글에서는 C#에서 SQL 연결을 해서 값을 받아와 사용한다면 거의 항시 사용하게 되는 DataTable의 데이터를 가져오는 방법을 정리할 것이다. 가져오는 방법은 단일 테이블 조회 시 datatable.Select("조건")함수를 써서 값을 조회 할 수 있지만 다중 테이블 간의 키 값으로 join을 사용해야되는 경우에는 Select()로 가져오기 힘들기 때문에 LINQ식의 join을 이용한 데이터 추출 방법을 정리해본다. 정리할 내용은 이렇다. LINQ를 활용한 JOIN 사용법 > inner join, left join 용법을 이용한 테이블 및 변수 값 가져오기 LINQ를 활용한 JOIN 사용법 1) LINQ - Inner Join var innerJoin = from alias_tb_a in.. Programming/C# 2021. 12. 28. 이전 1 2 다음 💲 많이 본 글