본문 바로가기

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

C# ColorDialog 기본 예제 안녕하세요 마블랑입니다. C#에는 기본적으로 제공되는 컨트롤 등이 많이 있습니다. 이러한 컨트롤들만 이용하여 프로세스를 개발해도 될정도로 잘 구현되어 있다고 생각하는데요 그 중 하나인 색상 선택 컨트롤인 ColorDialog에 대해서 알아보도록 하겠습니다. 일반적으로 그림판에서 색상은 선택할때 보여지는 아래 화면을 자신이 구현한 프로세스에서 사용할수 있습니다. 예제 프로그램을 보면 '색 선택' 버튼을 클릭하였을때 색상을 선택하면 왼쪽 Panel에 색상이 표시되고 선택한 색의 RGB값이 아래에 텍스트 박스로 표시되는 프로세스 입니다. 코드는 아래와 같습니다. using System; using System.Windows.Forms; namespace WindowsForms_Test_003 { public .. 2019. 6. 24.
C# PictureBox 이미지 마우스로 클릭하여 이동하기(돋보기 기능) 안녕하세요 마블랑입니다. 정확히 어떤 프로그램인지는 기억이 안나지만 돋보기 기능이 있어 작은 이미지를 확대해서 보여주는 프로그램이 있었습니다. 그 기능과 유사하게 PictureBox에 이미지를 올리고 사이즈 변동없이 마우스를 이용하여 이미지를 이동시키는 프로그램을 구현 해보려고 합니다. 먼저 사이즈가 굉장히 큰 이미지를 준비하여 주세요 ^^ 이미지가 크면 클수록 이 프로그램이 유용합니다. 이미지를 구하였으면 이제 C# 프로젝트에 이미지를 등록하겠습니다. 프로젝트의 Properties 를 클릭하여 주세요 왼쪽 메뉴에 리소스 항목이 있습니다. 이것을 클릭해 주세요 처음 리소스를 열면 아래와 같이 문자열로 되어있는데 이것을 이미지로 변경해주시면 됩니다. 그리고 난뒤에 리소스 추가의 기존 파일 추가를 눌러주시고.. 2019. 6. 22.
C# .Net DLL 만들기, 사용하기 (참조추가, x64 DLL) 안녕하세요 마블랑입니다. 얼마전에 리눅스 라이브러리 제작에 관해서 포스팅을 한적이 있습니다. C#으로도 역시 라이브러리를 제작하고 베포할수 있는데요 윈도우 라이브러리는 DLL 이라고 하는데 C# DLL을 베포하기 용이하게 만들어보고 활용해 보겠습니다. 우선 새로운 프로젝트를 추가합니다. 프로젝트는 "클래스 라이브러리(.NET Stantdard)"를 선택하여 주세요. 프로젝트명을 입력하고 확인을 클릭하여 주세요^^ 프로젝트가 생성되면 아래와 같이 필요한 함수를 구현하여 주시기 바랍니다. 마블랑은 이전에 포스팅 했던 static을 통해 함수를 구분하였습니다. 다음은 DLL 을 배포하기 위해 Release로 구성하고 플랫폼을 64bit로 바꿔주었습니다. 만약에 사용하려는 C# 프로젝트가 32bit라면 이 작업.. 2019. 6. 22.
C# Winform으로 만든 야구게임 안녕하세요 마블랑입니다. 학교다닐때 친구들과 가끔 시간때우기로 했었던 야구게임이 생각나서 C#으로 한번 구현해보았습니다. 오래전에 무한도전에서 야구게임을 이용하여 게임을 할때 만들어봐야지 했던것을 이제야 만들게 되었군요 ㅠㅠ 간단한 알고리즘으로 구현되어 있으니 프로그래밍을 처음 접하는 분들에게 공부하기 좋을거 같습니다. 기능은 크게 난수를 생성하고 결과를 확인하는 기능이 있습니다. 난수 생성시에는 숫자간의 중복을 체크하여 중복이 없을때까지 난수를 계속 생성을 합니다. using System; using System.Windows.Forms; namespace CSharp_BaseballGame { public partial class Form1 : Form { int RandomNum; bool bSta.. 2019. 6. 21.
C# 로딩화면 추가하기(Splash 구현 예제) 안녕하세요 마블랑입니다. 요새는 데이터 양이 많아져서 PC 프로그램이나 모바일 프로그램을 실행할때 로딩화면이 없는것이 없습니다. 로딩이 완료가 되면 그떄부터 프로그램을 이용할수 있는데요 구현하려는 프로그램이 데이터가 많아서 로딩시간이 오래걸리는데 마우스에 로딩표시만 표시하고 싶지 않은 분들이 있을거라 생각합니다. 마우스 모래시계 말고 로딩화면을 보여주는것이 더 세련되 보이지 않을까 해서 C# 프로세스에 로딩화면, 즉 Splash화면을 추가를 해보려고 합니다. 예제를 먼저 소개하면 해당 Count가 100에서 0으로 변했을때 로딩화면이 닫히고 메인폼이 나타납니다. 화면은 간단하므로 바로 코드를 보겠습니다. 코드 역시 어렵지 않으나 Thread가 포함되어 있습니다. 클래스 생성자에 Thread를 시작하여 C.. 2019. 6. 21.
C# NotifyIcon 컨트롤을 이용한 Tray 구현하기 안녕하세요 마블랑입니다. 백신프로그램이나 메신저같은경우 오래켜져있지만 작업표시줄에 표시되지 않는 프로그램들이 있습니다. 윈도우가 켜지면 그와 비슷한 시간을 켜있어야 하기때문에 작업표시줄에 표시가 되면 은근히 신경쓰이죠. 그렇기 때문에 백신과 메신저는 윈도우의 시계가 표시되는 부분에 작은 트레이 아이콘으로 표시가 됩니다. 물론 더블클릭하면 큰 화면으로 볼수 있고 평상시에는 작업표시줄에 표시되는 것보다 작은 아이콘으로 표시를 하고 있죠 C#을 통해서 트레이 아이콘으로 표시되는 프로세스를 만들수 있는데요 그 방법은 정말 간단합니다. 우선 NotifyIcon을 Winform에 추가합니다. 추가한 NotifyIcon에 아이콘과 텍스트를 지정해줍니다. 텍스트는 꼭 지정하지 않아도 되지만 아이콘을 지정하지 않으니 트.. 2019. 6. 21.
C# 자식폼 DialogResult 결과 받기 안녕하세요 마블랑입니다. C# 에서 자식폼의 종료 결과를 받아서 부모폼에서 처리하는 방법에 대해 간단한 포스팅을 합니다. 1. 부모폼 (Form5_p) using System; using System.Windows.Forms; namespace WindowsForms_Test_001 { public partial class Form5_p : Form { public Form5_p() { InitializeComponent(); } private void Bt_child_Click(object sender, EventArgs e) { Form5_c form5_c = new Form5_c(); //자식폼 표시 DialogResult result = form5_c.ShowDialog(); //자식폼 종료 결과.. 2019. 6. 20.
C# 부모폼과 자식폼 데이터 전달 안녕하세요 마블랑입니다. C#을 통해 프로세스를 구현했을때 단순히 부모폼과 자식폼 사이의 데이터를 주고 받아야 할때 사용할 수 있는 간단한 코드를 알려드립니다. 1. 부모폼 (Form_p) using System; using System.Windows.Forms; namespace WindowsForms_Test_001 { public partial class Form4_p : Form { public String SendData = "부모 원본 데이터"; //public 으로 선언 public Form4_p() { InitializeComponent(); } private void Bt_child_Click(object sender, EventArgs e) { Form4_c form_child = ne.. 2019. 6. 20.
C# String.Format 소수점 자리표시 안녕하세요 마블랑입니다. C#을 통해 수치를 표시해주는 프로그램을 만들때 소수를 표시해야하고 소수점 자리수를 맞춰줘야 하는 경우가 있습니다. 그것과 관련하여 마블랑이 간단하게 소수점 자리를 표시하는 방법에 대해서 정리하였습니다. 아래 그림과 같이 string.Format을 이용하면 되는데요. 기존에 C++에서 사용하던 Format 형식과는 조금 다른것을 알수 있습니다. string str = string.Format("{0:0.00} ", double.Parse(textBox.Text)); Format을 지정하는 부분 {0:0.00} 을 보겠습니다. 콜론 앞에 있는 부분은 Format에 들어갈 매개변수(?)의 순서라고 보면됩니다. 지금은 매개변수가 Double형 하나만 있지만 여러개를 넣어야 하는 경우 .. 2019. 6. 20.
C# Listview 컬럼형식으로 사용하기(Listview 선택) 안녕하세요 마블랑입니다. 마블랑은 이전에 MFC를 해서 그런지 리스트 형식의 데이터는 ListControl로 다루는 것이 익숙해져있습니다. 찾아보니 C#에도 그것과 비슷한 ListView가 있어 적응하기 쉬웠습니다. 간단한 샘플을 통해 C#의 Listview를 사용해보도록 하겠습니다. ListView의 가장 큰 기능은 데이터를 표시하고 선택을 하는 기능이기 때문에 해당기능 위주로 샘플을 작성하였습니다. 전체 코드를 첨부합니다. using System; using System.Windows.Forms; namespace WindowsForms_Test_001 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } pri.. 2019. 6. 20.
C# DateTimePicker to String, String to DateTimePicker 안녕하세요 마블랑입니다. C#으로 프로그램을 구현하던 중에 DateTimePicker를 이용 하게 되었습니다. 데이터베이스에도 날짜데이터를 넣어야 하고 날짜형식의 String으로도 표시를 해야했기 때문에 캐스팅이 필요했습니다. 마침 캐스팅 방법을 알게되어 간단하게 포스팅을 통해 정리하게 되었습니다. DateTimePicker 의 Value는 DateTime 형식이기 때문에 DateTime 과 String 사이의 형변환이라고 보시면 될거 같습니다. 먼저 예제 소스를 보겠습니다. 버튼1은 String to DateTime 이고 버튼2는 DateTime to String 입니다. private void Button1_Click(object sender, EventArgs e) { try { dateTimePi.. 2019. 6. 19.
C# ODBC 연동하기 (MS Access 불러오기) 안녕하세요 마블랑입니다. 지난번에 C#으로 구현한 프로그램이 ODBC 등록없이 Mysql 데이터베이스에 접근하는 것을 포스팅하였습니다. 이번 포스팅은 C# 에서 OdbcConnection 클래스를 이용해 ODBC에 등록된 데이터 베이스에 접근해보도록 하겠습니다. 테스트를 위해 먼저 MS Access 데이터베이스를 만들고 생성하였니다. Purchase 라는 테이블을 만들고 그안에 간단한 데이터를 넣어두었습니다. MS Access DB를 생성하였으니 ODBC를 등록해보겠습니다. ODBC 창에들어가서 추가를 눌러 드라이버를 선택하여 줍니다. 드라이버는 Microsoft Access Driver (*.mdb, *.accdb) 를 선택하여 주면 됩니다. 드라이버를 선택하면 접속 정보를 설정할수 있는데요. 이 접속.. 2019. 6. 19.
C# MySqlConnection 사용하여 Mysql 접속하기 (ODBC를 등록하지 않고 DB 사용, MySqlCommand, MySqlDataReader, MySqlCommand) 안녕하세요 마블랑입니다. 윈도우 프로그램을 만들때 데이터베이스에 접속하여 테이블 데이터를 가져오려면 ODBC를 꼭 설정해야하는 줄 알았습니다. 하지만 단지 접속 정보만 가지고 있다면 굳이 ODBC를 등록하지 않아도 DB에 접속할수 있는것을 알게 되었어요 ^^ ODBC를 등록하지 않아도 되니 배포할때 더 간편해졌습니다. MySqlConnection 을 사용하여 데이터를 가져올수 있는데요. 이 클래스를 사용하려면 Mysql DLL 을 참조 해야합니다. 그리고 using도 추가해줍니다. ( using MySql.Data.MySqlClient ) 예제 소스는 버튼에 구현을 해두었지만 구현 성향에 맞춰 사용하시면 될거 같습니다. 예제에는 에러처리가 되어 있으니 바로 사용하실수 있을겁니다.^^ MySqlConnec.. 2019. 6. 18.
C# 객체 생성 함수 사용 (Class, static) 안녕하세요 마블랑입니다. C#으로 프로그램을 구현하던 중에 모듈을 클래스로 관리하면 코드의 가독성이 높아져서 자주 클래스화 시키곤 합니다. 그러던 중 클래스의 함수를 객체 선언을 하지 않고 사용하는 방법을 알게되었습니다. 먼저 C# 프로젝트를 생성하고 새로운 클래스를 추가하여 줍니다. 클래스 내부에 다음과 같이 함수를 구현해 줍니다. 두개의 함수가 있는데 첫번째 함수는 static을 추가하여 줍니다. 클래스 구현이 완료되었다면 클래스를 호출해봅시다 ^^ 첫번째 함수인 ReturnString_1은 객체를 생성하지 않고 클래스에서 바로 호출할수 있습니다. 바로 static으로 선언됬기 때문입니다. 함수목록을 보면 static이 아닌 ReturnString_2는 보이지 않습니다. 다음은 객체를 생성하여 함수목.. 2019. 6. 18.
C# Mysql blob NULL 판단하기 (blob 에러처리) 안녕하세요 마블랑입니다. 얼마전에 C# 프로그램을 개발하던 중에 Mysql의 blob 컬럼에 이미지를 삽입하는 기능을 구현한 적이 있습니다. 이미지를 삽입했을때는 문제업이 잘 되었지만 blob 컬럼이 NOT NULL 이 아닌 관계로 이미지가 없을경우 에러가 발생하더군요 에러를 처리하기 위해 이런저런 방법을 시도해보고 하였지만 기존에 문자열 컬럼을 에러처리하는 방법으로는 처리가 되지 않더군요. 그래서 좀더 자료를 찾고 확인해보고 결국에는 해결을 하였습니다. MySqlCommand cmd = new MySqlCommand(Sql, conn); MySqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { if (!(rdr["PHOTO"].Equals(Sys.. 2019. 6. 17.