본문 바로가기

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

C# Mssql 연동하기 안녕하세요 마블랑입니다. 이번 포스팅은 C# 프로그램에서 데이터 베이스 Mssql을 연동하는 방법입니다. 이전에는 ODBC를 이용해 데이터베이스와 연동하는 방법에 대해 포스팅을 했었는데 이번에는 ODBC연동없이 데이터 베이스를 연동하고 활용해보도록 하겠습니다. 간단하게 Mssql 데이터베이스와 연결하고 테스트 테이블에 간단한 데이터를 입력한 뒤에 방금 그 테이블에서 데이터를 조회를 하려고합니다. 정리해서 말하면 Mssql 연결 (Connect) -> 데이터 삽입 (Insert) -> 데이터 조회 (Select) 이런 단계 입니다. 코드는 어렵지 않고 간단해서 위 단계를 한번에 구현했습니다. //Mssql 연결 SqlConnection sqlcon = new SqlConnection("Server=127... 2020. 6. 24.
C# WPF 사용자 컨트롤 Xaml에 추가하기 안녕하세요 마블랑입니다. C#에서 제공해주는 기본 컨트롤로도 UI프로그램을 만들기에는 충분하지만 요즘 시대에 중요시 되는 디자인이 별로 좋지 않죠.. 가끔 기본 컨트롤을 이용해 기능을 추가하여 사용할때도 있고 다양합니다. 그래서 기본 컨트롤을 상속받아 기능을 추가하여 사용자 컨트롤을 만들기도 하고 그러는데요 C#의 WPF 에서 그렇게 만든 사용자 컨트롤을 XAML에 추가하고 사용해 보도록 하겠습니다~ 프로젝트 생성은 건너뛰고 바로 사용자 컨트롤을 만들어 보겠습니다~ 생성한 클래스는 메인과 같이 두어도 되지만 Lib이라는 폴더를 생성해 클래스끼리 관리하는게 더 보기 좋겠죠? 사용자 컨트롤 만드는 법은 굉장히 쉬운데요 클래스를 추가하고 상속을 해주면 됩니다. 이때 생성자를 public으로 해줘야 xaml에 .. 2020. 6. 23.
C# WPF 투명 GIF 이미지 띄우기 안녕하세요 마블랑입니다. C# WPF에서 투명 GIF 파일을 프로그램으로 띄우는 코드입니다. WPF에 있는 기본 컨트롤 MediaElement 컨트롤을 이용했습니다. 사각형모양의 투명이 없는 GIF는 단순히 MediaElement로 동영상을 재생하듯이 GIF이미지를 띄워주면 됩니다. 그런데 투명이 있는 GIF파일을 띄우려면 약간의 문제가 발생하는데요 GIF파일 영역중 투명부분이 검은색으로 표시가 됩니다. 이것을 투명하게 하고 배경이 보이도록 하려면 아래와 같이 XAML 코드와 .cs 파일 코드를 구현하면 됩니다. XAML .CS using System; using System.Windows; using System.Windows.Media.Imaging; namespace WPF_GIFTester { p.. 2020. 6. 22.
C# BackgroundWorker 구현하기 안녕하세요 마블랑입니다. 프로그램을 개발할때 관리하기 힘든 쓰레드(Thread)를 구현할때는 상당히 스트레스를 받습니다. 쓰레드 종료에 대해서 살짝 깜빡하다보면 계속 돌아가기도 하고 디버그도 하기 힘들다고 생각합니다. 그래도 어쩔수 없이 쓰레드를 구현해야할때가 있는데요 보통 소켓통신할때가 그렇죠.. C#에서 Thread 클래스를 사용하여 Thread를 구현할수도 있지만 이번 포스팅에서는 "BackgroundWorker" 라는 클래스를 이용해서 쓰레드를 구현해보겠습니다. 메인 생성자에 newThread의 객체를 등록하며 쓰레드 이벤트도 함께 추가합니다. using System; using System.ComponentModel; using System.Threading; using System.Window.. 2020. 6. 19.
C# using으로 메모리 관리 안녕하세요 마블랑입니다. C#은 기존의 C나 C++로 길게 구현하던 코드를 간단하게 몇줄로 아주 쉽게 구현할수 있습니다. 물론 그 문법에 대해서 잘 이해하고 써야되는데요 대표적으로 람다식이 그렇다고 생각합니다. 또한 C#은 C와 C++ 과는 달리 자동으로 가비지 컬렉터가 스스로 메모리를 관리해주기 때문에 메모리에 크게 신경쓰지 않아도 됩니다. 그래도 경우에 따라서는 Close() 나 Dispose()를 해줘야하는데요 그것조차도 문법에서 알아서 자동으로 해주는 방법이 있습니다. C# 개발자라면 오픈소스를 찾다가도 종종 보게되는 "using()" 이 바로 그것입니다. using 이라면 자바에서의 import나 C,C++에서의 include 처럼 쓰이는 것이라고 생각할수도 있는데요 이 포스팅에서 말하는 usi.. 2020. 6. 19.
C# Textbox 텍스트 박스 자동 스크롤 안녕하세요 마블랑입니다. 이번 포스팅은 C#의 Winform이나 WPF에서 가장 기본적으로 쓸수있는 컨트롤, Textbox(텍스트박스) 에 관한 포스팅입니다. 보통 텍스트 박스는 입력을 받을때 사용합니다. 때로는 프로그램의 Log(로그)를 표시해줄때도 사용하는데요 로그를 표시할때 대부분은 로그가 많아져서 화면에 다 보이지 않고 스크롤을 통해서 기존의 로그도 남기고 새로운 로그도 추가할수 있습니다. 로그를 추가할때는 Textbox.AppendText()를 이용하거나 Textbox.Text += "추가 문자열" 을 이용하는데요 이렇게 문자열 로그를 추가하면 로그들이 텍스트박스의 크기를 넘어갈때 새로운 로그 내용을 볼수 없습니다. 스크롤을 통해 수동으로 아래로 내려 로그를 확인해야하죠 그렇다면 로그 메시지가 .. 2020. 6. 18.
C# TimeSpan으로 시간간격 구하기 안녕하세요 마블랑입니다. C#에서 활용할수있는 시간사이의 간격을 구하는 방법에 대해서 알아보겠습니다. .Net(닷넷) 프레임워크에서 기본적으로 제공해주는 TimeSpan 클래스를 이용하면 두 시간사이의 차이를 구할수 있습니다. 먼저 구현한 코드를 보면서 설명을 하겠습니다. Timespan을 잘 활용하려면 DateTime 클래스도 사용해야합니다. DateTime클래스를 사용하지 않아도 되지만 DateTIme클래스를 이용해 날짜와 시간을 관리하는게 좀더 편리할듯 합니다. 버튼을 클릭하면 시작시간과 끝나는 시간을 기록하고 이 두개의 시간을 이용해서 TImeSpan 객체를 생성합니다. 그리고 Timespan.Subtract를 이용해서 끝나는 시간에서 시작시간을 빼면 두시간 사이의 경과시간을 추출할수 있습니다~ .. 2020. 6. 11.
C# 프로그램에 이미지 포함하기 안녕하세요 마블랑입니다. 비주얼스튜디오나 다른 프로그래밍 언어를 이용해서 GUI 인터페이스를 구현할때 기본적인 컨트롤만 사용해도 어느정도 프로그램을 만들수 있습니다. 하지만 기본적인 컨트롤을 사용하면 사실 프로그램이 오래되 보이기도 하고 디자인이 좋은 모습은 아니죠.. 그래서 다른 라이브러리를 이용해서 기본 컨트롤을 구성하거나 직접 이미지를 넣고 디자인을 꾸며서 프로그램을 한층더 업되 보이게 만들수도 있습니다. 전자의 경우 단순히 라이브러리를 사용하면 되지만 후자의 경우는 이미지를 프로그램에 삽입하여 버튼에 입힐수도 있고 배경화면으로 꾸밀수 있습니다. 어떻게 프로그램에 이미지를 추가하는지에 대해서는 많이 알고 있을거라 생각합니다. 그래서 배포할때도 실행파일과 같이 이미지 파일 등 디자인 파일들을 같이 배.. 2020. 6. 10.
C# nameof로 변수명 알아내기 안녕하세요 마블랑입니다. 다른 프로그래밍언어에 있는지는 모르겠지만 C#에서는 변수명을 알게해주는 연산자가 있습니다~ "nameof"라고 하는 연산자인데요. 보통 변수안에 있는 데이터를 사용하지 변수명은 알 필요가 없어 실제로 사용할일이 있을지 모르겠습니다. 일단 사용법에 대해서 알아보겠습니다. int num = 100029; string NameofTestString= num.ToString(); tb_nameof.Text=nameof(NameofTestString); 아주 간단합니다. nameof() 매개변수에 변수를 넣으면 되는데요 물론 "" 큰따옴표를 제외하고 넣어줘야합니다. 저는 버튼에 위 구문을 넣어두어서 왼쪽 텍스트블록에 문자열의 변수명을 받아왔습니다. 위에도 언급하였었지만 보통 변수의 데이터.. 2020. 6. 10.
C# .Net 다른 프로세스 실행 ( Process, ProcessStartInfo ) 안녕하세요 마블랑입니다. 프로그램 기능에 따라서 본 프로그램이 아닌 다른 프로그램, 즉 다른 프로세스를 실행시켜야 할때가 있습니다. 대체로 WatchDog(와치독) 같은 프로그램이나 런처 프로그램들이 그러한 기능이 필요할거같은데요 C#, 닷넷에서 제공해주는 클래스들을 이용하면 아주 쉽게 간단한 런처와 와치독 프로그램을 만들수 있습니다. 다른 프로그램, 프로세스를 실행하려면 ProcessStartInfo클래스를 사용하면 됩니다. 그리고 추가로 현재 실행되는 프로세스 목록을 확인하려면 Process 클래스를 사용하면 됩니다. 간단한 예제 코드를 보겠습니다. //다른 프로세스, 프로그램 실행하기 private void Bt_execute_Click(object sender, RoutedEventArgs e) .. 2020. 6. 6.
C# RDotNet 샘플프로젝트 소스코드 안녕하세요 마블랑입니다. 이전에 C# 과 R 의 연동인 RDotNet에 관련된 포스팅에서 사용했었던 샘플 예제 코드입니다. 잘 활용하시기 바랍니다! 이상 마블랑이었습니다. 읽어주어서 고맙습니다. 2020. 5. 31.
C# .Net 시리얼 통신 구현 안녕하세요 마블랑입니다. 윈도우에서 응용프로그램을 개발할때 하나의 프로그램을 만들수도 있지만 장비를 제어하는 프로세스를 만들수도 있습니다. 개인적으로 장비를 제어할때 실제 제어가 되는 것을 보니 장비제어 프로세스를 구현하는것이 더 재미있게 느껴지는데요 윈도우 프로세스에서 장비를 제어하는 방법은 간단히 말하면 주로 소켓통신을 이용하거나 시리얼 통신을 이용하면 되는데요 C#에서는 시리얼통신을 할때 기본 클래스를 제공하기 때문에 아주 쉽게 구현할수 있습니다. 먼저 장비와 시리얼 포트를 연결하고 데이터를 보내는 부분을 구현해 보겠습니다. SerialPort serial = new SerialPort("포트넘버"); //포트넘버, 보드레이트, 시작비트 등 설정할수 있습니다. //보드레이트 등을 설정할수 있습니다... 2020. 5. 29.
C# .Net 프로젝트 빌드시 실행파일명 변경 안녕하세요 마블랑입니다. 보통 비주얼스튜디오에서 C# 프로젝트를 생성하고 빌드를 할경우에는 프로젝트명으로 실행파일이 출력됩니다. 근데 처음 프로젝트를 생성할때와 다르게 실행파일명을 변경해줘야 할때가 있는데요 그럴 경우를 대비해서 프로젝트 빌드 후에 생성되는 실행파일명을 변경하는 방법에 대해서 알아보려고 합니다. 샘플을 보면서 설명을 하겠습니다. 샘플용으로 "BuildTester" 라는 프로젝트를 만들었습니다. 우선 빌드를 해보겠습니다. 그뒤에 실행파일이 생성된 폴더로 가보면 실행파일명도 프로젝트명과 동일하게 "BuildTester" 인것을 확인할수 있습니다. 그럼 이제 빌드 후에 생성되는 실행파일의 명을 변경해주도록 하겠습니다. 아래 빨간 박스로 표시된 프로젝트 속성파일을 열어주세요 가장 맨 위에 있는 .. 2020. 5. 26.
C# .Net 통신용 구조체, 마샬링 안녕하세요 마블랑입니다. 같은 언어와 같은 플랫폼에서의 통신을 주고 받을때 크게 문제가 되지 않을듯합니다. 하지만 다른 플랫폼과 다른 프로그래밍 언어를 사용할때는 데이터를 맞게 보낸다고 해도 이것저것 고려해야할것이 많죠 .. 예를 들어 빅엔디안, 리틀엔디안이 있는데요 그외에도 통신을 주고 받을때 패킷을 구조체로 변경하는 경우가 많습니다. 또는 구조체를 패킷으로 바꿔야할때도 있죠 그렇지만 컴퓨터나 시스템에서 패킷처리하는 데이터의 단위가 달라 바이트 패킷이 구조체로 잘못변환될수도 있더군요. 그것을 방지하기 위해서 구조체에 선언된 변수의 길이만큼 구조체의 길이도 변경해줘야 하는데요. C#에서는 마샬링을 통해서 구조체의 길이를 통신 패킷에 맞춰 변경할수 있습니다. 아래 그림과 같이 구조체 위에 Pack을 1로 .. 2020. 5. 22.
C# .Net Image.Stretch 속성 안녕하세요 마블랑입니다. C# 에서 이미지 컨트롤을 사용할때 이미지 컨트롤에 따라 표시되는 이미지의 크기를 조절할수 있습니다. Image에 Stretch 속성을 이용하면 되는데요 표현해주고싶은대로 Stretch를 설정하여 조정할수 있습니다. 그럼 어떤 속성이 있는지 살펴보기 전에 코드를 먼저 살펴보며 Stretch속성을 어떻게 설정하나 보겠습니다. 아래 코드는 xaml 코드에서 Stretch 속성을 설정하였지만 C# 코드에서도 Stretch속성을 조정할수있습니다~ Stretch 속성은 이미지 컨트롤의 속성창에서 설정을 하면 xmal 코드에 자동으로 추가됩니다. 속성의 검색창에 Stretch를 검색해주세요 위 코드를 보면 이미지 컨트롤 Image_01은 Stretch 속성이 기본값인 'Uniform'으로 .. 2020. 4. 18.