본문 바로가기

개발 이야기/C# 이야기65

C# .Net 문자열 공백 제거 안녕하세요 마블랑입니다. 얼마전에 프로젝트를 진행하면서 byte 배열을 문자열로 컨버팅을 할때 문제가 발생을 하더군요 여유롭게 사이즈를 잡아놓은 바이트 배열에서 문자 '\0'을 공백으로 문자열로 컨버팅을 해버리니 문자열 길이를 출력해보니 공백까지도 포함해서 길이가 출력이 되더군요.. (무슨이유인지를 몰랐습니다.) string.trim이나 string.replace를 사용해 보아도 제거가 되지 않아서 여러가지 방법을 찾아보니 아래같이 코딩을 하니 해결이 되었습니다. Encoding.ASCII.GetString(array).TrimEnd('\0'); Trim은 Trim인데 TrimEnd를 사용하니 되더군요. 문자열로 컨버팅을 한뒤 텍스트 박스에 많은 데이터를 출력을 했는데 해당 문자열만 공백이 길어져서 건너.. 2020. 4. 12.
C# .Net WPF Textbox Enter키 입력 및 자동 줄바꿈 안녕하세요 마블랑입니다. C# WPF 에서 사용자의 텍스트를 입력받을수 있는 Textbox(텍스트박스) 컨트롤 기본적인 기능이야 .Net에서 잘 구현되어 있지만 가끔 특수한 기능을 구현해서 사용해야 될때가 있는데요 그 Textbox(텍스트박스) 관련해서 기본 컨트롤에 몇가지 특수한 기능을 추가해보려고 합니다. 바로 엔터키를 입력해서 여러줄을 입력 받을수 있게 하는 기능과 한 라인의 글자수를 제한해서 자동으로 다음 줄에 텍스트가 써지게 하는 기능입니다~ 아래화면처럼 최대길이 10자리를 넘어가면 자동으로 아래줄에 쓰여집니다. 그리고 Enter(엔터)키를 사용해서 최대 길이가 넘지 않아도 아래 줄로 내려갈수 있도록 기능을 추가해두었습니다~ 1. 자동줄바꿈 자동 줄바꿈 기능은 .Net(닷넷)에서 따로 제공하는것.. 2020. 3. 28.
c# .Net 할당되지 않은 지역 변수를 사용했습니다. 안녕하세요 마블랑입니다. C#으로 프로그래밍을 할때 예기치 못한 에러 때문에 개발이 막힐때가 종종 있습니다. 그런데 그 에러는 정말 간단한 부분에서 발생하는 경우가 대다수인데요 그중 하나인 "할당되지 않은 지역 변수를 사용했습니다."라는 에러 메시지에 대해서 해결 방법을 알아보겠습니다~ 아래 코드는 간단하게 정수형 변수에 따라 출력 메시지가 달라지는 기능을 구현한것 입니다. 코드는 간단하지만 컴파일을 하려고보니 에러가 표시되며 컴파일이 되지 않는군요. 에러 메시지는 "할당되지 않은 '(변수명)' 지역 변수를 사용했습니다."로 표시가 되는군요.. 이렇게 에러가 발생하는 경우는 string 변수를 선언하고서 초기화를 해주지 않아서 그런데요 string 뿐만아니라 다른 데이터 타입은 물론 클래스 까지도 선언하.. 2020. 3. 25.
C# .Net Array.Copy() 바이트 복사 안녕하세요 마블랑입니다. 윈도우에서 소켓통신이나 시리얼 통신 등 통신 프로그램을 만들때 보통 바이트 단위로 데이터를 주고 받습니다. 그래서 바이트 단위로 데이터를 잘 다룬다면 어렵게 느껴지는 통신프로그램이 쉽게 느껴질것입니다. 바이트 배열로 데이터를 받으면 보통 이 데이터는 여러가지 데이터가 담겨져 있습니다. 그래서 바이트 배열을 정해진 길이만큼 잘라서 써야 하는데요 C#에서는 Array 클래스를 이용하면 바이트를 필요한만큼 잘라서 쓰는것이 굉장히 쉽습니다~ 배열을 잘라쓰기 위해 사용해야하는 함수 말고도 Array클래스의 유용한 함수도 알아보겠습니다~ (아래 예제 코드에 포함된 함수들입니다~) 1. Array.Copy(byte[] source, int sourceIndex, byte[] destinati.. 2020. 3. 23.
C# .Net WPF 의존프로퍼티(DP) 안녕하세요 마블랑입니다. C#에서 Winform을 주로 사용하다 요새 들어 WPF를 배워보았습니다. 그동안 Winform(윈폼)을 통해 윈도우의 GUI프로그래밍이 쉽다고 느꼈었는데 WPF는 그것보다 조금 더 어려운 감이 있군요. Winform(윈폼)과 WPF의 차이점은 여러가지 있겠지만 프로세스나 자원을 건너뛰고 외적인 것만 본다면 화면 디자인을 더 다양하게 구현할수 있는 것이 장점이라고 생각합니다. 생각보다 배워야하는 WPF의 기능이 많아 완벽히 이해하고 사용하는데 시간이 오래 걸리겠지만 조금씩 배우면서 포스팅을 작성하려고 합니다. 아직 WPF를 배우고 있어 정확히 설명을 하기는 어렵지만 배우는 시각에서의 C# WPF를 설명하여 이해하기 쉽게 도우려고 합니다. 이번 포스팅에는 WPF의 기능중 하나인 D.. 2020. 3. 16.
C# .Net 문자열 나누기 Split 안녕하세요 마블랑입니다. 이번 포스팅은 간단하게 C#, .Net에서 문자열을 특정문자로 나누는 방법에 대해서 소개하겠습니다. 먼저 예제 코드를 보겠습니다. string strMsg = "1/2/3/4/5/6/7/8/9/0/a";//예제 문자열 string[] strTemp = strMsg.Split('/'); //문자열 '/' 으로 나누기 //문자열 나누기 출력 string strOutput = ""; foreach (string temp in strTemp) { strOutput += temp + "\n"; } MessageBox.Show(strOutput); 출력결과 : C# .Net 에서 문자열을 나눌때 String.Split() 함수를 사용하면 됩니다~ 매개변수는 문자열이 아닌 문자만 넣을 수 있.. 2020. 3. 14.
C# .Net String to Byte array, Byte array to String Convert문자열 변환 안녕하세요 마블랑입니다. C#에서 데이터 통신을 할때면 바이트형식으로 변환해야할 때가 많습니다. 통신 패킷을 구조체로 만들어 전체를 변경하는 방법이 있긴 하지만 데이터를 하나씩 일일이 바이트로 변경해야할 경우가 있어 문자열을 바이트 배열로 변경하는 방법에 대해서 소개하겠습니다. 1. string(문자열) to byte array byte[] arrbyte = Encoding.UTF8.GetBytes("testMessage"); //변환 데이터 출력 string strOutput=""; for (int i = 0; i < arrbyte.Length; i++) { strOutput += arrbyte[i] + " "; } MessageBox.Show(strOutput); 출력 : 116 101 115 116.. 2020. 3. 14.
C# .Net OpenFileDialog 여러파일선택 안녕하세요 마블랑입니다. 프로그래밍을 할때 해당 프로그램이 다른 파일과 연동되는 경우가 많습니다. 게다가 이 파일을 선택하는것은 프로그래머가 아닌 사용자라면 파일 경로를 직접 사용자의 입력으로 받아야하는데요 C# 또는 .Net에서는 그것을 아주 쉽게 구현할수 있습니다. C# 프로젝트를 생성하고 디자인화면에서 도구창을 보면 "OpenFileDialog" 클래스가 있습니다. 바로 이클래스를 활용해보겠습니다. 바로 디자인 화면에서 드래그해서 사용할수 있지만 이번에는 직접 코딩을 해보도록 하겠습니다. 드래그해서 사용하는경우 속성창에서 해당 OpenFileDialog의 속성을 설정해주면 됩니다. 코딩은 다음과 같습니다. 약간의 주석을 달아두었는데 표시가 안되는 부분은 따로 설명하겠습니다. using System;.. 2020. 3. 7.
VisualStudio .Net 버전 3.0 빌드문제 해결 안녕하세요 마블랑입니다. 프로그램을 개발하다보면 인터넷에 있는 오픈소스를 활용할때가 많습니다. 비주얼스튜디오를 이용해서 개발하는 C++이나 C#, .Net 등 굉장히 오픈소스가 많은데요 주로 비주얼스튜디오 오픈소스는 프로젝트, 솔루션 단위로 다운 받을수있습니다. 프로젝트, 솔루션 단위라 분석하고 빌드하기 정말 편리한데요 그런데 프로그래밍이라는 분야가 오래되었듯이 오래된 오픈소스가 아직도 꽤 많습니다. 물론 굉장히 유용한데 C#의 경우 .Net 프레임워크의 버전이 맞지 않아 빌드할때 아래와 같은 에러가 발생합니다. " ".NetFramework.Version=v3.0" 프레임워크에 대한 참조 어셈블리를 찾을 수 없습니다. " " .NetFramework v3.5 서비스 팩 1을 찾을 수 없습니다. ".Ne.. 2020. 2. 26.
C# Thread 시작과 종료 안녕하세요 마블랑입니다. 지난번 C# 로딩화면인 스플래쉬 화면에 대해 포스팅을 할때 Thread에 대해서 언급한적이 있습니다. 그때는 Thread를 시작하는 부분만 잠깐 사용하고 별다른 설명 없이 넘어갔었는데요 이번에는 Thread의 시작과 종료에 대해서 알아보고 부수적인 설명을 추가하려고 합니다. ^^ 예제 프로그램화면입니다. Thread 시작 버튼을 누르면 아래 카운트가 증가합니다. 그리고 Thread 중지버튼을 누르면 카운트가 중지됩니다. 카운트 증가는 Thread에서 반복문으로 처리하고 있습니다. 만약 Thread로 처리하지 않는다면 프로그램은 반복문이 끝날때까지 멈춰있을것입니다. Thread 중지버튼은 Thread를 종료하는 것이기 때문에 종료가 된뒤에 시작버튼을 다시 클릭하면 카운트가 0부터 .. 2019. 7. 3.
C# TcpListener와 TcpClient를 이용한 TCP소켓구현 안녕하세요 마블랑입니다. C#에서 TCP 소켓통신을 구현할때 Socket 클래스를 이용했었습니다. 처음 소켓통신을 배울때 리눅스에서 배웠기 때문에 socket 생성 - bind - listen - accept 단계에 익숙해져서 그런가 이 방법만 사용하게 되더라고요 ^^ 그래서 다른 프로그래밍 언어로 소켓 프로세스를 구현할때 Socket클래스 사용을 많이 했었는데요 이번에 TcpListener와 TcpClient 클래스로 각각 서버와 클라이언트를 구현하니 정말 간편하고 코드도 보기가 훨씬 쉬워졌습니다. 객체를 생성할때 매개변수로 IP와 Port만 입력을 해주면 내부적으로 알아서 설정을 해주고 소켓을 사용할수 있도록 해줍니다. 데이터를 주고받는것도 Stream을 통해서 주고받기 때문에 read나 write .. 2019. 7. 2.
C# Environment.SpecialFolder 를 이용한 경로 가져오기 안녕하세요 마블랑입니다. C# 에 대한 자료를 찾던 중에 우연히 괜찮은 정보를 알게되었습니다. 윈도우에서 사용하는 특정 폴더의 경로를 가져오는 기능인데요 내문서라든가 사진, 음악 등등 사용자 폴더도 있으며 Program Files 처럼 시스템 폴더의 경로도 가져올수 있습니다. 아래와 같이 특정 폴더명을 가져올수 있습니다. 코드는 정말 간단합니다. using System; namespace Console_Test_003_4 { class Program { static void Main(string[] args) { Console.WriteLine(""); Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)); Cons.. 2019. 6. 25.
C# TabControl 탭 디자인 변경하기 안녕하세요 마블랑입니다. C#에서 Tab기능을 사용할때 상용 라이브러리가 아니라면 기본적으로 제공하는 TabControl 클래스를 사용합니다. TabControl은 기본적인 탭 기능은 정상적으로 동작이 되는데 디자인이 괜찮지가 않기도 하고 탭 위치를 변경하려고 할때 컨트롤 모양이 조금 깨지는것을 보았습니다. 그래서 그러한 증상을 막기위해 직접 탭을 구현하는 방법에 대해서 알려드리겠습니다. 미리 말을하자면 탭은 감추고 버튼 컨트롤을 통해 탭기능을 추가하는 것입니다. 우선 메인폼에 TabControl 객체를 추가하시기 바랍니다. 동적으로 추가를 해도 상관없습니다. 그리고 나서 TabControl의 속성창에서 아래와 같이 설정하시기 바랍니다. 다른 항목을 설정하기전에 TabPages에 들어가서 탭 제목들을 모.. 2019. 6. 24.
C# File 클래스 파일 열기 및 쓰기 안녕하세요 마블랑입니다. 이번포스팅은 아주 간단하게 할수 있는 파일 입출력입니다. 지난번 파일 복사, 이동, 삭제때 사용했던 클래스를 사용했던 File 클래스를 사용하면 아주 간단하게 파일을 입출력할수 있습니다. 아래와 같이 경로를 선택해주고 내용을 입력한뒤 저장버튼을 클릭하면 내용이 저장이 됩니다. 지금은 텍스트 파일(.txt) 파일 하나로 고정되어 있지만 응용시에 확장자를 선택하는 기능을 추가하여서 사용하시기 바랍니다. 저장버튼을 클릭하면 해당 위치에 텍스트 파일이 생성되고 내용이 저장됩니다.^^ 경로를 선택할때 openfileDialog를 사용하였습니다. 저장을 하려고 하는것이기 때문에 파일존재여부 기능을 False로 변경하여야 합니다. 코드를 보겠습니다. using System; using Sys.. 2019. 6. 24.
C# File클래스 파일 복사, 이동, 삭제 안녕하세요 마블랑입니다. 파일을 다루는 가장 기본적인 기능 파일복사, 이동, 삭제를 C# 으로 구현하였습니다. 어느 프로그래밍 언어나 마찬가지로 C#도 파일을 다룰수 있는 클래스가 기본으로 제공이 되기 때문에 어렵지 않게 구현할 수 있습니다. 직접 구현한 예제 파일을 설명하며 파일을 다루는 방법을 알아보도록하죠 각각 복사할 파일과 이동할 파일을 선택하면 다음과 같이 파일을 선택하는 다이얼로그(OpeaDialog)가 출력됩니다. 이 파일선택 다이얼로그도 ColorDialog처럼 윈도우에서 제공하므로 아주 편리한 기능이 아닐수 없군요 파일을 선택하면 아래와 같은 경로가 텍스트 파일로 보이고 복사할 위치를 선택만 하면 해당 위치로 파일이 복사가 됩니다. 파일삭제 삭제할 파일의 경우 단순히 삭제 기능만 있기 때.. 2019. 6. 24.