#C#
192022.12.07
인플루언서 
하이제니스
8,082IT테크 전문블로거
참여 콘텐츠 22
3
C# DataGridView의 행 헤더 제거하기 Disable Row Header

C#에서 DataGridView를 추가하면 왼쪽 그림과 같이 행(Row) 쪽 헤더(Header) 셀 이 자동으로 나타나는데 이것을 오른쪽 그림처럼 아예 없애려면 아래와 같이 DataGridView 속성 중 RowHeadersVisible를 False로 주면 된다.

2022.11.29
5
C# - 콤보 박스 읽기 전용(텍스트 편집 X)으로 만들기

왼쪽 아래와 같이 기본 콤보 박스는 텍스트 편집이 가능하게 되어있다. 이것을 오른쪽 이미지와 같이 텍스트 편집 기능을 제거함으로써 오동작을 막기 위함이다. 위와 같이 변경하는 것은 상당히 간단하다. 먼저 디자인 창에서 변경할 콤보 박스를 선택하고 ... 위와 같이 모양 > DropDownStyle을 DropDownList로 변경해 주면 된다. 참고로 기본은 DropDown이다.

2022.06.20
C# StripStatusLabel 루프 안에서 업데이트하기

예를 들어 아래와 같은 형태로 StripStatusLabel을 사용한다고 가정해 보자. void run_() { toolStripStatusLabel1.Text = "시작"; for (int i = 0; i < 99999999; i++) { /* ... ... */ } toolStripStatusLabel1.Text = "종료"; } 해당 코드를 실행하면 상태 바에 "시작"은 표시되지 않고 다 완료되면 "종료"만 나타날 것이다. 이렇게 루프가 돌아가는 함수 안에서 상태 바의 값을 실시간으로 변경하고 싶을 땐 다음과 같이 Refresh 함수를 추가해 주면 된다. void run_() { toolStripStatusLabel1.Text = "시작"; // stripStatusLabel 만 갱신 toolStripStatusLabel1.GetCurrentParent().Refresh(); // this.Refresh(); // 전체 화면(컨트롤러) 갱신 for (int i = 0; i < 99999999; i++) { /* ... ... */ } toolStripStatusLabel1.Text = "종료"; } 이제 "시작"이라는 상태를 볼 수 있을 것이다. 다만, 위에서도 보듯이 GetcurrentParent 함수를 통해 Refresh를 사용하게 되는데 toolStripStatusLabel에는 Control 기능이 없어 부모 객체를 통해서...

2022.06.14
2
C#(CSharp) - 파일을 일부 잘라 복사하기 소스 코드

아래의 코드는 파일을 일부만 잘라 복사하는 소스코드이다. using System; using System.IO; static int Main(string[] args) { // 인자 갯수 int argsCount = args.Length; // 인자 갯수가 4보다 작으면 에러 if (argsCount < 4) { Console.WriteLine("Usage: bln_crop.exe {inputFilename} {outputFilename} {offset, hex} {size, hex}"); Console.WriteLine(" ex) bln_crop.ex src.bin dest.bin 0 8000"); return -1; } // 첫번째 인자는 입력 파일 string inputFile = args[0]; // 두번째 인자는 출력 파일 string outputFile = args[1]; // 입력 파일에서 복사할 시작 바이트 위치 (16진수) string fileCropOffset = args[2]; // 복사할 바이트 크기 (16진수) string fileCropLen = args[3]; int valueOffset = 0; int valueLen = 0; try { // 문자열을 숫자(16진수)로 변경 valueOffset = Convert.ToInt32(fileCropOffset, 16); valueLen = Convert.ToIn...

2021.12.07
12
비주얼 스튜디오 2019 설치하기

윈도우 프로그램은 역시 C#(C Sharp)! 이라지만 이것 외에도 비주얼 스튜디오는 설치해두면 다양하게 쓰일 때가 많다. 아... 그나저나 이제는 Win32와 MFC가 거의 기억이 나질 않는다... 1. 설치 파일 다운로드하기 Install C and C++ support in Visual Studio Learn how to install Visual Studio with support for Microsoft C/C++ and related workloads. docs.microsoft.com 비주얼 스튜디오 2019 설치 파일을 다운로드하기 위해 위 링크에 접속해보자. 사이트에 접속 후 Step 2에 있는 Download Visual Studio를 클릭한다. 그러면 위와 같이 다운로드 페이지가 나타날 것이다. 여기서 커뮤니티 아래 보이는 무료 다운로드버튼을 클릭해 설치 파일을 다운로드한다. 2. 설치하기 이제 다운로드한 설치 파일을 실행해보자. 계속! 준비 중.... 음... 잠시 대기... 잠시 기다리면 위와 같이 설치할 패키지(구성)화면이 나타날 것이다. 기본적으로 위와 같이 .NET 데스크톱 개발, C++을 사용한 데스크톱 개발, 유니버설 Windows 플랫폼 개발정도만 먼저 선택한다. 그다음 상단에 보이는 언어 팩탭으로 이동하여 영어도 선택해주자. 이제 오른쪽 아래에 있는 Install 버튼을 눌러 설치를 시작한다. 설치...

2021.08.06
C# 마이크로세컨드(마이크로초, microsecond) 지연(Delay) 및 정밀한 지연 함수 만들기

보통 C#에서 지연을 줄 때 아래와 같이 사용하였었다. using System.Threading; ... ... Thread.Sleep(1); //1 ms 딜레이 ... ... 그런데 이 함수는 정확하게 1ms만 대기를 하는 것이 아니라 그때그때 우선순위에 따라 수십 ms 이상 지연이 발생할 수도 있다. USB나 UART로 패킷 데이터를 전송할 때 지연 함수로 위와 같이 사용한다면 데이터 전송의 속도가 원하던 지연보다 훨씬 길어지는 것을 볼 수 있을 것이다. 또, 해당 함수는 밀리세컨드(ms)단위로만 지연이 가능하므로 마이크로(micro)단위로 지연을 주고 싶을때도 사용이 어렵다. 마이크로세컨드 단위로 설정할 수 있으며 보다 정확한 지연을 주기 위해선 아래와 같이 함수를 만들어 사용하는 것도 방법 일 것이다. //Stopwatch 클래스 사용을 위한 상위 네임스페이스 추가 using System.Diagnostics; //Microseconds Delay void delayUs(long us) { //Stopwatch 초기화 후 시간 측정 시작 Stopwatch startNew = Stopwatch.StartNew(); //설정한 us를 비교에 쓰일 Tick값으로 변환 long usDelayTick = (us * Stopwatch.Frequency) / 1000000; //변환된 Tick값보다 클때까지 대기 while (startNe...

2021.02.03
2
C#(CSharp) - HIGHT ECB 암/복호화 알고리즘 소스 코드

하이트(HIGHT)는 KISA, ETRI 부설 연구소, 고려대가 공동으로 개발한 소형(저사양) 장치용 암/복호화 알고리즘이다. 이 하이트는 몇 가지 모드를 지원하는 데 그중에서도 ECB(Electronic Code Block)는 가장 연산량이 작아 낮은 사양의 MCU에서도 사용하기 좋을 듯하다. 자세한 설명은 아래의 링크를 참고하면 좋을 것 같다. KISA 암호이용활성화 - HIGHT HIGHT HIGHT 암호 알고리즘 HIGHT(HIGh security and light weigHT)는 RFID, USN 등과 같이 저전력ㆍ경량화를 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 2005년 KISA, ETRI 부설연구소 및 고려대가 공동으로 개발한 64비트 블록암호 알고리즘입니다. HIGHT, AES암호 알고리즘의 소프트웨어 및 하드웨어 구현 성능 비교 결과는 다음과 같습니다. HIGHT 암호 알고리즘 소프트웨어 구현 성능 비교 표준화 현황 알고리즘 CPU/OS/Complier P3/WinXP/VC P4/WinX... seed.kisa.or.kr 그리고 키사(KISA)에서 C와 자바(JAVA)로 소스 코드와 예제 코드를 제공하고 있고 아래의 링크에서 다운로드 가능하다. KISA 암호이용활성화 - 암호알고리즘 소스코드 자료실 정보보호의 기반 암호기술 및 정책에 대한 다양한 정보전달 HOME 자료실 암호알고리즘 소스코드 암호알고리즘 소스...

2021.01.06
2
C#(CSharp) - TextBox의 글씨를 고정 폭(monospaced)으로 표시하기

TextBox에 아래와 같이 글씨를 넣으면 각 글씨별 넓이가 달라 정렬이 되지 않는다. 이럴땐 textBox의 폰트를 monospace로 변환 해주면 간단하게 해결된다. //txtData = TextBox txtData.Font = new Font(FontFamily.GenericMonospace, txtData.Font.Size);

2018.12.10
C#(CSharp) - 이미지(Image)를 바이트 배열(Byte Array)로 변환 코드

보통 아래와 같은 코드가 많이 공개되어 있다. public byte[] imageToBytes(System.Drawing.Image imageIn) { using (var ms = new MemoryStream()) { imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); } } 하지만 내가 잘 몰라서 그러는지 위의 방식을 이용하면 GIF 파일 포맷에 맞게 배열로 리턴해준다. 딱 필요한건 이미지 데이터만 바이트 배열로 변환하고 싶은 것인데.. 그래서 아래와 같이 Bitmap의 LockBits를 이용해 이미지를 읽어오니 딱 이미지 데이터만 리턴을 받을 수 있게 되었다. public byte[] BytesFromImage(Image img) { int width = img.Width; int height = img.Height; Bitmap output = (Bitmap)img; Rectangle rect = new Rectangle(0, 0, width, height); BitmapData bmpData = output.LockBits(rect, ImageLockMode.ReadWrite, output.PixelFormat); int bpp = Image.GetPixelFormatSize(output.PixelFormat) / 8; byte[] ne...

2018.12.10
C#(CSharp) - 24Bit 칼라(Color)를 8Bit 그레이스케일(Grayscale)로 변환 코드

24 bit bitmap to grayscale Forum Visual C++ & C++ Programming C++ (Non Visual C++ Issues) 24 bit bitmap to grayscale If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register or Login before you can post: click the register link above to proceed. To start viewing m forums.codeguru.com GrayscalePixel = (RED * 0.3) + (GREEN * 0.59 )+ (BLUE * 0.11) public byte[] bytes24bitToGrayscale(byte[] src, int width, int height) { byte[] gray = new byte[width * height]; int imageOffset = 0; //비트맵은 54(해더파일 크기)를 넣어준다. bool bInvertVertical = false; //비트맵은 상하 반전이 될 수 있다. int bpp = 3;// 24bit for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++)...

2018.12.10
4
C#(CSharp) - 장치 제어 레지스터 편집 폼 구성 코드(ft. WPF)

chandong83/csharp_reg_edit_wpf csharp wpf reg edit example. Contribute to chandong83/csharp_reg_edit_wpf development by creating an account on GitHub. github.com I2C로 칩 제어를 해야 하는데 딱히 디버깅할 툴이 없어서 작업 중에 위와 같이 구성하면 장치 테스트 용으로는 괜찮을 것 같아서 기본 틀만 코드를 올려봤다. 여기에 살을 붙여 사용할 예정이다. 기능은 마우스 커서를 가져가면 현재 위치를 나타내는 번호가 표시가 되며 선택을 하면 선택한 번호가 하이라이트 되며 옆에 정보가 표시가 된다. Edit form for device control with CSharp Code(WPF)

2018.11.17
4
C Sharp(C#) Window Form Designer(윈폼 디자이너) 에러

c#을 하다 보면 아래와 같은 에러를 만날 수 있다. 오류는 각각 다르겠지만 이때 오류를 바로 수정해주면 크게 문제가 없을 텐데.. 이것을 무시해버리고 그냥 넘어가면 다시는 아래와 같은 에러를 볼 수 없다. 즉, 어디가 어떤 문제여서 윈폼 디자이너가 안되는지 알기가 어렵다는 얘기이다. 이번에 위와 같은 에러가 발생하였는데 버릇처럼 무시해버렸더니 엄청난 일이 벌어진 것이다. (오류라도 다시 알려주면 좋을 것을 ㅜㅜ) 어떻게든 다시 살려보겠다고 발버둥 치다가 안돼서 구글링을 해보니 어떤 의인(?)께서 이 문제에 대한 해답을 내리셨다. Unable to get the designer view window back using windows forms with Visual Studio 2010 I am in process of writing a C# Windows Forms application using Visual Studio Express 2010 ENU SP1. Further VS specifics are at the bottom of this post. I recently made some changes using the des... stackoverflow.com 해결책은 자신의 프로젝트 안에 있는 "프로젝트명. cproj" 열어서 <Compile Include="Form1.cs"> 검색해본다. (Form1.cs 가 윈폼 코드파일이...

2018.09.20
13
C#(CSharp) - OpenCV 사용 - 회전(Rotation), 뒤집기(Flip), 크기 조절(Resize)

C#에서 OpenCV 사용하는 방법은 다음과 같다. 1. 프로젝트에서 OpenCV 라이브러리 설치 프로젝트에서 마우스 오른쪽 버튼을 눌러 "NuGet 패키지 관리(N)..." 선택 NuGet 패키지 관리 창이 보이면 "찾아보기" 탭 선택 후 검색창에 "opencv"를 검색하여 "OpenCvSharp3-AnyCPU"를 선택 오른쪽에 "설치" 버튼 클릭 "확인" 선택 설치가 완료되면 "설치됨" 탭으로 가서 설치가 되었는지 확인 2. Form에 picturebox 추가 picture box 2개 추가하고 이름은 기본 값인 pictureBox1, pictureBox2로 그냥 둔다. 3. 이미지 처리 소스 코드 3-1. 회전(Rotation) 전체 코드 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OpenCvSharp; namespace OpenCV_test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } ...

2018.07.11
3
C# 문자열 공백 분리시 다중 공백 처리하기

문자열을 공백으로 나눌 때 보통 아래와 같은 코드를 사용한다. char[] delimiterChars = { ' ' }; string txt = "I am a boy"; string[] Txts = txt.Split(delimiterChars); for(int i=0;i<Txts.Length;i++) Console.WriteLine("[{0}]: {1}",i, Txts[i]); 하지만 이때 문자열에 공백이 두 개 이상 발생하면 문제가 된다. string txt = "I am a boy"; 만약 데이터 파싱 시 공백을 구문으로 처리한다면 위와 같은 상황에서 에러가 발생할 것이다. 이때 해결할 수 있는 방법은 여러 가지가 있지만 아래와 같이 StringSplitOptions.RemoveEmptyEntries 옵션만 하나 추가해준다면 알아서 냉무(?) 항목들을 제거하여 배열을 만들어 준다. 그러면 언제나 쾌적한 파싱이 가능할 것이다. char[] delimiterChars = { ' ' }; string txt = "I am a boy"; string[] Txts = txt.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries); for(int i=0;i<Txts.Length;i++) Console.WriteLine("[{0}]: {1}",i, Txts[i]);

2018.01.02
C# 키보드 동작 확인 코드

키보드의 어떤 키가 눌리는지 확인하기 위한 코드는 아래와 같다. protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { string key = keyData.ToString() + " pressed"; key_label.Text = key; return base.ProcessCmdKey(ref msg, keyData); } 아래의 첨부파일은 프로젝트 파일이다. 비주얼 스튜디오 2017(Visual Studio 2017)로 작업되어있다. key_monitor.zip 내 컴퓨터 저장 네이버 클라우드 저장

2017.12.29
4
네이버 TTS(Text to Speech)를 사용하자 - C# 프로그램 만들기

네이버 음성합성(TTS) API 사용하기 - C#(씨샵) 편 http://chandong83.blog.me/220956890937지난번 파이썬 편을 해보니 다른 언어들도 혹시 어떤 문제들이 발... chandong83.blog.me 이전에 네이버에서 제공해주는 C# 용 예제를 돌려본 적이 있다. 이것을 바탕으로 아주 간단한 응용 프로그램을 만들어 봤다. 소스 코드는 아래 링크에 있다. chandong83/NaverTTS_with_CSharp NaverTTS_with_CSharp - NaverTTS with C# github.com 그리고 실행 파일만 필요하다면 아래의 첨부파일을 다운로드하면 된다. NaverTTS.zip 내 컴퓨터 저장 네이버 클라우드 저장 실행해보면 아래와 같은 이미지가 보일 것이다. 여기서 중요한 것은 Client ID 와 Secret은 자신이 개발자 센터에서 할당받아야 한다. NAVER Developers 네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 지도, 검색, 단축URL, 캡차를 비롯 기계번역, 음성인식, 음성합성 등이 있습니다. developers.naver.com 할당받는 방법은 어렵지 않다. 아래의 링크를 참고해보는 것도 좋을 것이다. 네이버 음성 합성 API를 사용해보자! 추가사항 - 17...

2017.10.31
C# & OpenGL - STL 파일 보기 소스 코드 STL Viewer

https://github.com/batu92k/STL-Viewer/tree/master/stl_viewer/triangle_mesh%201 batu92k/STL-Viewer STL-Viewer - *.stl model file viewer program ( C#+ OpenGL ) github.com 위의 어떤 사람이 아주 간단하게 STL Viewer를 공개해줬다. 그런데 이 녀석이 Text 방식의 STL만 제공해주고 있고 OnShape에서 제작된 파일 또한 불러오질 못한다. 그래서 코드를 수정해서 STL Binary 방식을 지원하고 OnShape Text STL 방식도 호환되게 수정해봤다. 아래의 링크는 수정된 소스 코드이다. STL-Viewer-master.zip 내 컴퓨터 저장 네이버 클라우드 저장 실행만 해볼 사람은 아래의 파일을 다운로드하면 된다. triangle_mesh 1.zip 내 컴퓨터 저장 네이버 클라우드 저장 STL 파일 포맷은 아래의 링크를 참고하였다. 포맷이 상당히 단순하다. STL (file format) - Wikipedia For other uses, see STL . STL ( STereoLithography ) is a file format native to the stereolithography CAD software created by 3D Systems . [1] [2] [3] STL has se...

2017.09.23
6
C# OpenGL 사용하기 위한 OpenTK(Open Toolkit library) 설치

C#에서 Open GL을 사용하기 위해서는 OpenTK를 설치해줘야 한다. 예전에는 Tao Framework라는 녀석이었는데 현재는 OpenTK로 변경되었다. The Tao Framework 주소 https://sourceforge.net/projects/taoframework/ OpenTK(The Open Toolkit library) 주소 https://sourceforge.net/projects/opentk/ 위의 링크에서 설치 파일을 다운로드한다. 5초 정도 기다리면 다운로드 될 것이다. 만약 크롬을 사용하는 중이라면 아래와 같은 경고 메시지가 나타날 텐데 "계속" 버튼을 눌러 다운로드한다. 다운로드가 완료되었다면 설치 파일을 실행하여 계속 "I Agree", "Next"만 눌러주면 설치가 완료되다. 이제 C#으로 Open GL을 사용해봐야겠다.

2017.09.23
C# 시리얼(COM) 포트 검색하여 콤보 박스(comboBox)에 표시하기

C#에서 시리얼 통신용 프로그램을 만들다 보면 연결된 포트 리스트를 사용해야 할 때가 있다. 요즘같이 USB to Serial을 이용하는 경우에는 거의 필수라고 봐야겠다. // combo_comList = 콤보 박스 //COM Port 리스트 얻어 오기 string[] comlist = System.IO.Ports.SerialPort.GetPortNames(); //COM Port가 있는 경우에만 콤보 박스에 추가. if (comlist.Length > 0) { combo_comList.Items.AddRange(comlist); //제일 처음에 위치한 녀석을 선택 combo_comList.SelectedIndex = 0; } C#.... 확실히 MFC 보단 손 노가다 적어서 좋다.

2017.07.14
2
C# AES 256 CBC 바이트(Bytes) 처리 함수

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation 1. 바이트 단위 암호화 함수 // 바이트 암호화 함수 static byte[] EncryptBytes(byte[] plainData, byte[] Key, byte[] IV) { if (plainData == null || plainData.Length <= 0) throw new ArgumentNullException("plainData"); if (Key == null || Key.Length <= 0) throw new ArgumentNullException("Key"); if (IV == null || IV.Length <= 0) throw new ArgumentNullException("IV"); byte[] encrypted; using (RijndaelManaged rijAlg = new RijndaelManaged()) { rijAlg.Key = Key; rijAlg.IV = IV; rijAlg.Padding = PaddingMode.None; ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream c...

2017.07.13