통상 대화창에서 [확인] 버튼을 누르면 필요한 작업을 수행하는 것이 보통이지만 텍스트 입력창에서 엔터키를 눌렀을 때 마우스 클릭 없이 바로 대화창을 종료하고 싶은 사용자가 있기 마련이다. 이러한 경우에 처리할 수 있는 방법이다. 대화창의 디자인 편집기를 열고 텍스트 박스를 선택한 다음 위의 그림과 같이 속성창에서 이벤트 아이콘을 클릭한다. 그리고, "KeyDown" 이벤트를 찾아 우측 공간에 더블클릭하여 자동으로 코드를 만들고 다음과 같이 코드를 작성하면 된다. private void intext_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { gomake_Click(this, new EventArgs()); } } 입력된 ..
프로그램 내에서 워드 문서(마소 오피스나 리브레 오피스로 작성)를 새롭게 생성하거나, 기존 문서를 수정하거나 아니면 특정 양식에 필요한 내용을 반영하여 새로운 문서를 만드는 등의 작업을 하는 경우가 있다. 자동차 검사소에서 고객들이 받는 검사 결과지를 예로 들 수 있다. 각종 자동차 검사를 수행하면 다양한 검사 장비와 센서에서 올라온 값들을 검사원이 양식에 일일이 입력하는 것이 아니라 작업이 끝났다는 신호와 함께 보고서 출력을 지시하면 미리 준비된 양식에 해당 값을 자동으로 입력하여 출력하고 양식은 파일로 남겨 놓는 것이다. 우리나라 국민들이 받는 건강 검사의 경우도 마찬가지이다. 사람이 직접 입력하는 신상 정보와 검사 정보를 데이터베이스에 저장해 두었다가 미리 준비한 양식에 맞게 출력하는 것이다. 본 ..
응용 프로그램을 동작하는 시스템의 언어 설정에 따라 사용자 인터페이스의 언어가 자동으로 바뀌게 하면 그만큼 프로그램의 활용도와 유용성은 높아진다. 상당히 많은 오픈소스 프로젝트들이 이런 체계를 적용하고 있고, 국내의 많은 개발자들은 나름의 번역 실력으로 해당 프로젝트에 참여하기도 한다. 코드 커미터로 참여하면 더 좋겠지만 개인적으로 보기에는 대부분은 한국어 번역 추가에 그치고 있다. 아무튼 이러한 다국어 기반 또는 국제화(i18n)가 적용된 프로젝트들은 많은 경우 gettext를 도구로 활용한다. 통상 영어를 기본 언어로 하여 소스 코드 등에서 gettext를 사용하도록 개발한다. 개발이 어느 정도 진행되면 도구를 통해서 사전 파일인 *.po를 만들어 내고, 번역자들은 소스 코드를 손대지 않고 단순 텍스..
다양한 CPU, 다양한 운영체제의 홍수 속에서 자바와 .Net과 같은 플랫폼 독립성을 가진 체계가 점점 더 힘을 얻어가고 있는 형국이다. 운영체제나 CPU의 종류에 제한받지 않는 응용 프로그램의 개발 및 배포는 생산성뿐만 아니라 여러 가지 장점을 제공한다. 더구나 끊임없는 하드웨어 성능의 발전은 플랫폼 독립성 때문에 희생해야 하는 성능적인 단점조차도 문제가 되지 않게 해주고 있다. C언어로 작성한 프로그램을 C/C++ 컴파일러로 빌드하게 되면 윈도나 리눅스와 같은 특정 운영체제에서만 수행할 수 있는 기계어 코드가 만들어 진다. 이 기계어 코드는 특정 운영체제에서만 사용할 수 있을 뿐만 아니라 CPU의 제약도 받을 수밖에 없다. 그만큼 개발자의 입장에서는 다양한 플랫폼 환경을 감안해야만 한다. 그렇지만 자..
대부분의 일반적인 응용 프로그램에서는 사용할 가능성이 거의 없지만, 약간 도구성의 프로그램을 개발하거나 직접 _paint 메시지를 받아서 이미지나 텍스트를 드로잉 하는 프로그램의 경우에 화면 크기를 벗어나는 영역에 대한 처리를 위해서는 스트롤 바 컨트롤을 적용하는 것이 사용자 편의성을 높여 주는 방법이라 할 수 있다. 비주얼 스튜디오 도구 상자에서는 수직 방향의 컨트롤을 위한 VScrollBar와 수평 방향의 컨트롤을 위한 HScrollBar 컨트롤을 제공하고 있으므로 해당 컨트롤을 폼에 삽입하여 처리한다. 폼에 스크롤바 컨트롤을 추가한 다음에 속성 창에서 Dock를 VScrollBar는 우측(Right)으로 붙도록, HScrollBar는 아래쪽(Bottom)으로 붙도록 설정해 준다. Dock 값을 Ri..
C# 닷넷 프로그램에서 시스템 시간을 변경하는 과정을 설명합니다. C# 닷넷 프로그램에서 시스템 시간을 설정하는 과정에서 꼭 유념해야 할 것들은 WIN32 API인 SetSystemTime()을 이용해서 설정하는데 그 과정에서 컴퓨터 시스템의 타임존을 반드시 감안해야 한다는 것입니다. 또한 윈도우 10등의 경우 시스템 시간을 변경하는 것이므로 프로그램을 관리자 권한으로 수행시켜야 프로그램이 실제 효력을 발휘할 수 있습니다. struct SYSTEMTIME { public ushort wYear; public ushort wMonth; public ushort wDayOfWeek; public ushort wDay; public ushort wHour; public ushort wMinute; public..
키보드가 없는 임베디드 시스템이나 터치스크린 시스템에서 키 입력을 받는 방법은 크게 두 가지가 있습니다. 하나는 윈도 시스템에 내장되어 있는 가상 키보드 어플을 동작시키는 것으로 외부 프로세스로 osk.exe를 실행시키는 방법입니다. 다음과 같은 코드로 간단하게 수행시킬 수 있습니다. Process p = new Process(); p.StartInfo.FileName = "C:\\Windows\\System32\\osk.exe"; p.StartInfo.Arguments = null; p.StartInfo.WindowStyle = ProcessWindowStyle.Normal; p.Start(); 두 번째 방법은 WinForm 내에 자체적인 가상 키보드를 내장시키는 것으로 가상 키보드를 직접 제작하는 방..
다른 프로그램을 실행시켜도 화면 한 구석에 항상 창이 보이는 응용 프로그램을 제작해야 하는 필요가 생겼습니다. 통상 트레이(Tray)등을 활용하는 경우가 많지만 임베디드 환경처럼 키보드도 없고 윈도 상태바도 숨김으로 동작한다면 이런 필요를 충족시켜주기에는 한계가 있습니다. 예를 들어 한 응용 프로그램에서 다른 프로그램을 실행시킨 다음에 ALT+TAB이나 트레이 등의 방법을 사용하지 않고 원래의 프로그램으로 돌아올 방법이 필요한 것입니다. 아니면 너무나 자주 사용하는 프로그램이기 때문에 항상 가동 중에 있다가 다른 프로그램을 사용하고 있는 중이더라도 버튼만 누르면 해당 프로그램으로 복귀하고 싶은 필요를 해결해 주고자 하는 경우입니다. 이런 경우 C# WinForm의 TopMost 속성을 사용하는 경우가 많..
가장 인기 있는 독립형 DBMS중의 하나인 SQLite를 비주얼스튜디오 개발 환경에서 편리하게 사용할 수 있도록 준비하고 C#을 기반으로 SQLite를 이용하는 과정을 다룹니다. ■ SQLite DBMS 소개 C# .Net 환경에서 응용 프로그램을 개발하는데 있어 검토해야 할 중요한 아키텍처 요소들은 사용자 인터페이스, 네트워크, 데이터베이스 등을 들 수 있습니다. 그중에서도 시스템을 확장성 있고 깔끔하게 만들 수 있는 핵심 요소는 자료를 저장하고 관리하는 데이터베이스라고 할 수 있을 것입니다. 통상 데이터베이스라고 하면 SQL Server, Oracle, MySQL, CUBRID, Firebird, PostgreSQL등의 DBMS를 떠올리지만 오늘 소개할 데이터베이스는 라이브러리 형태로 응용 프로그램에..
파이썬이나 C#은 딕셔너리 타입을 지원하는데 딕셔너리 타입은 C# 프로그래밍의 유연성을 높여 주는 상당히 유용한 도구입니다. Dictionary cntlidx = new Dictionary(); if (cntlidx.ContainsKey(idxname) && cntlidx[idxname] >= 0) // control exist { cntlidx[idxname] = (short)Allclient.Count; //...... } 위의 예제는 String 타입의 키와 short 타입의 값을 가지는 딕셔너리를 정의하고 사용하는 코드입니다. 딕셔너리를 정의한 다음에는 cntlidx["A001"] = 10; 처럼 딕셔너리에 값을 저장하거나 갱신할 수 있습니다. 만약 딕셔너리에 키가 존재하지 않는 데이터를 rst ..
C#에서 딕셔너리, 큐, 리스트 등 다양한 데이터 집합 클래스를 지원하지만 배열만큼 성능을 보장하는 데이터 타입은 없습니다. 한가지 데이터 타입을 가지고 인덱스로 각 원소를 접근하는 단순한 사용법을 가집니다. 배열을 다양한 용도로 사용하다 보면 초기화 필요성이 생기는데 그 필요성을 크게 두가지로 나누면배열을 상수처럼 정적인 데이터로 사용하기 위해서 실제 데이터 입력하는 경우가 그 첫번째이고 다른 한가지는 동적으로 배열을 사용하는 경우 0이나 널 값등으로 초기화하는 사례를 들 수 있습니다. String[] statstr = new String[] { "설정", "설정 오류", "시작하지 않음", "정상 동작중", "연결중", "비정상 종료" }; public class DICObj { public stri..
server=localhost;database=testdb;port=33000;user=public;password=pubpubserver=127.0.0.1;user id=root; password=wservice; database=mysql; pooling=falseUser=workuser; Password=pw!@;Database=c:\tmp\mydb.fdb;DataSource=localhost;Port=3050;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));User Id=system;Password=SYSPASS;Server=myServerName\m..
배열을 인수로 전달받아 기준이 되는 배열과 동일한지 검사하는 방법은 함수를 통해서 처리하는 방법과 시스템에서 제공하는 메소드를 통해서 수행하는 방법이 있습니다. - 두 배열의 길이가 동일한지 비교- 배열의 길이 만큼 각 원소가 동일한지 비교 위의 방법을 수행하는 간단한 함수를 만들어도 되지만 타입이 달라지는 것에 대응하기 어렵고 굳이 시스템에서 제공하는 메소드가 있는데 별도의 작업을 할 필요는 없지요. using System.Security.Cryptography; byte[] conf_md5 = null; bool md5check(byte[] confmd5) { using (MD5 md5Hash = MD5.Create()) { conf_md5 = md5Hash.ComputeHash(Encoding.UT..
프로그램의 종류를 살펴 보면 아파치 웹서버나 크롬 브라우저, 윈도우 운영체제 처럼 서로 다른 언어 환경에도 불구하고 사용자 인터페이스만 다를뿐 동일한 기능과 성능을 발휘하는 범용 프로그램이 있는 반면 프로그램 로직 구성에 있어서 언어별 전문 용어가 사용 될 수 밖에 없는 프로그램들이 있습니다. 다양한 수식이 적용되는 회계 프로그램이나 대형 플랜트 관리 프로그램, 회사 업무 관리 프로그램등을 예로 들 수 있습니다. 이런 프로그램들의 내부를 살펴보면 업무 흐름을 표현하는 비즈니스 로직은 코드를 처음 보는 사람들에게는 거의 암호 수준이라해도 과언이 아닐 정도입니다. 콩글리시를 최소화하고 변수명, 함수명을 정확한 영어로 기술하여 그나마 가독성 있게 작성한 경우라면 다행이지만 이런 경우 마저도 영어를 읽을줄 아는..
웹 페이지에서 다양한 서식을 개발자가 의도하는대로 화면에 표시하려면 통상 HTML 태그 중에서 태그를 활용해서 테이블 형태로 페이지를 작성합니다. 행은 열은 태그를 사용하여 표현하죠. 윈도우 폼에서도 웹페이지의 테이블 형태로 표현하는 것과 같은 방식을 사용할 수 있는데 테이블 레이아웃을 사용하는 것입니다. HTML 처럼 폭 지정을 백분율로도 할 수 있고 고정값으로 설정하거나 자동 조정하도록 할 수도 있습니다. 폭을 자동 조정해주므로 다국어 언어를 적용하더라도 양식이 크게 흐트러지지 않고 실행되도록 할 수 있습니다. 비주얼스튜디오의 오프라인 매뉴얼 중에 "연습: 데이터를 입력할 수 있는 크기 조정 가능한 Windows Form 만들기" 참조해서 진행했습니다. 상단의 .NET Framework 4를 확인하면..
위의 그래프에서 좌측은 C# 및 .Net 데이터 타입별 메모리 크기이고 우측은 표현 가능한 값의 범위입니다. float, Single, double, Double, decimal, Decimal 타입을 부동소수점(Floating point) 타입이라고 하고 byte, int 등의 나머지 타입을 고정소수점(Fixed point) 타입이라 하는데 부동소수점은 소수점을 고정시키지 않고 유효숫자를 나타내는 가수(假數) 부분과 소수점의 위치를 나타내는 지수(指數) 부분으로 실수를 저장하는 방식입니다. 근사값을 표현하기 때문에 표현 가능한 값의 범위가 고정 소수점에 비해서 비교가 되지 않을 정도로 넓습니다. 특이한 것은 Decimal 타입인데 float나 double 타입에 비해서 메모리 크기가 4배 및 2배에 이..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 앞선 "LINQ 배우기를 위한 최적의 환경 LINQ to Objects"에서 다루었듯이 다양한 데이터 저장소에 대한 LINQ 사용법은 내부 오브젝트에 대한 LINQ 사용법을 익힘으로써 일정 부분 대신할 수 있으므로 리스트나 사전과 같은 C# 내부 오브젝트를 활용해서 LINQ에 대한 이해와 사용법을 차근 차근 다루어 볼까 합니다. 이번 포스팅은 사전 타입을 활용하여 LINQ ..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 "LINQ는 무엇인가?"에서도 다루었지만 LINQ(Language-Integrated Query)는 데이터베이스, XML 파일, ADO.NET 오브젝트, DataSets 뿐만아니라 내부 자원에 대해서도 다른 데이터 소스와 동일한 방식으로 처리를 수행할 수 있음을 나누었습니다. 다른 시각에서 바라보면 한가지 데이터소스에 대한 LINQ 사용법에 익숙하다면 다른 데이터소스에 대한..
C#.NET에서 다양한 사용자 컨트롤을 만들어 놓고 윈도우 폼에 적용해서 사용하는 경우 윈도우 폼 클래스에서 개별 컨트롤의 임의의 속성을 참조하거나 메소드를 실행시킬 필요가 있을 때가 있습니다. 닷넷에서는 System.Reflection을 통해서 프로그램 실행 중에 특정 클래스의 속성이나 메소드를 찾아서 참조하거나 호출할 수 있도록 기능을 제공하고 있습니다. 마치 자바 스크립트와 같은 웹 스크립트 언어에서 지원하는 기능을 사용할 수 있습니다. 윈도우 폼에 도구 상자에 있는 다양한 컨트롤이나 사용자 컨트롤을 배치하면 위의 그림과 같이 Form>Panel>Control과 같은 계층 구조를 갖게 됩니다. Form 오브젝트의 .Controls를 확인하면 Form에 속한 두개의 판넬 오브 젝트를 찾을 수 있고 각..
C#은 C와 같은 프로그래밍 언어이지만 언어를 정의하는 규격(Specification)이 지속적으로 변하고 있는 특성이 있습니다. 이 버전에서는 되고 버 버전에서는 않되는 혼란이 있을 수는 있지만 개발자의 필요를 즉각적으로 반영하여 발전한다는 측면에서는 긍정적입니다. 2002년 C# 1.0 규격이 발표된 이래 현재는 2015년에 발표된 C# 6.0이 최신 규격으로 사용되고 있습니다. 문제는 언어 규격이 바뀌면 바뀐 언어 규격을 모르는 이전 컴파일러들은 새로운 규격을 소화할 수 없으니 당연히 문법 오류(Syntax error)를 발생시킬 것이라는 점입니다. C# 프로젝트의 속성 창에서 빌드>고급을 통해서 위의 그림과 같이 고급 빌드 설정을 확인해 보면 현재의 비주얼스튜디오에서 지원하는 C# 언어의 버전을 ..
어떤 프로그래밍 언어이든지 타입간 변환은 자주 실수하거나 무심결에 넘겨버리고 하는 이슈입니다. 특히 문자열을 숫자로 전환해서 사용하는 과정에 꼼꼼하게 처리해 두지 않으면 불필요한 예외(Exception) 발생으로 곤혹함을 겪고는 합니다. is_digit = false; if (str.Length == 1 && int.TryParse(str, out tmp_n)) is_digit = true; 위의 코드는 문자열이 한자리의 숫자인지를 검사하는 로직으로 정수, 부동소수점수 각 타입별로 제공하는 TryParse 메소드를 적절하게 활용 할 수 있습니다. byte.TryParse, int.TryParse, Int16.TryParse, Int32.TryParse, Int64.TryParse, uint.TryPars..
C#이나 VB.Net 환경으로 응용 프로그램을 개발하는 과정에 큐브리드 데이터베이스를 사용하기 위해서는 다른 DBMS 처럼 닷넷 네이티브로 제작된 ADO.NET 드라이버를 사용하는 것이 가장 좋습니다. 사용 방식이 DBMS 별로 메소드 이름만 약간 다를뿐 대부분 대동소이하기 때문에 응용 개발자 입장에서는 매우 편리한 방법입니다. 특히 닷넷 네이티브(full managed .Net code) 드라이버를 사용하면 클라이언트 배포 과정에서 별도의 프로그램을 설치할 필요도 없어지기 때문에 응용 프로그램의 배포 과정도 단순하게 하는 효과를 가져옵니다. 큐브리드의 ADO.NET 드라이버는 http://www.cubrid.org/?mid=downloads&item=ado_dot_net_driver에서 다운로드 받을 ..
윈도우 폼(Windows Forms) 응용을 MDI(Multiple Document Interface) 형태로 만들면 하나의 윈도우 폼이 부모폼(Parent Form)이 되고 여러개의 자식폼을 내장하는 방식으로 편리한 창 관리, 예를 들어 타일 방식으로 창을 자동 배열하거나 연속 형태(Cascade)로 창을 간단하게 배열할 수 있습니다. 그런데 이런 형태의 창 배열을 사용하지 않고 부모폼의 작업 영역에 한번에 하나의 폼만을 표시하려고 하면 몇가지 설정이 필요합니다. 분명 자식폼으로 사용할 폼의 ControlBox 속성을 False로 설정했지만 위의 그림과 같이 자식폼이 부모 폼의 작업 영역에 꽉차도록 WindowState 속성을 Maximized로 설정하면 컨트롤 박스가 보이고 맙니다. 폼 클래스에 Do..
닷넷 환경에서 3D 모델을 표현하려고 자료를 찾다보니 의외로 공부해야 될것이 많았습니다. C#으로 3D 모델을 출력하기 위하여 공부하거나 자료를 찾아야 할 것을 정리해 보면 아래와 같습니다.3D 모델링 도구 *.gif, *.jpg, *.svg등을 모두 2D 그래픽이라 합니다. 평면 위에 다양한 이미지를 표현하는 것입니다. 반면에 3D 모델은 X, Y 좌표에 Z좌표를 추가해서 표현하기 때문에 일반적으로 많이 사용하는 포토샵이나 페인트닷넷, 김프 등으로는 제작할 수 없습니다. 3D 모델을 제작하여 파일로 저장하는 대표적인 도구로는 3DS MAX, Maya, Mudbox등을 들수 있으며 무료로 사용할 수 있는 오픈소스 도구로는 블렌더가 있습니다(3D 모델링 도구 블렌더 설치하기참조) 이러한 3D 모델링 도구를..
포토샵이나 페인트닷넷과 같은 이미지 편집툴을 사용해본 사용자라면 레이어의 편리함과 유용성에 대해서 더이상의 설명이 필요없겠지만 레이어를 아직 경험하지 못한 사용자를 위하여 간단한 설명을 드리자면 투명한 셀로판지에 그린 여러장의 그림을 레이어에 비유하면 딱입니다. 각각의 셀로판지에는 다른 셀로판지의 그림과 관계없이 자유롭게 그림을 그릴 수 있지만 여러 셀로판지를 겹쳐서 하나의 그림을 만들어 내는 것처럼 하나의 이미지 파일에 여러 레이어를 두어 편집의 편리함과 유용성을 얻을 수 있고 이미지 파일의 재사용성을 극대화할 수 있는 장점이 있습니다. 단순한 그림이라면 C#에서 굳이 레이어를 고민할 필요없이 이미지 편집툴에서 레이어로 편집하여 C#에서는 결과물만 사용하면 됩니다. 그런데 각 레이어 별로 별도의 변형이..
C#에서 이미지를 겹쳐서 보이게 할때 위에 있는 이미지와 아래에 있는 이미지가 자연스럽게 겹쳐서 보이게 하려면 위의 있는 이미지의 배경을 투명하게 제작할 필요성이 있습니다. 배경이 투명한 이미지 만들기는 페인트닷넷으로 투명한 배경의 이미지 만들기를 참조하세요. *.PNG, *.GIF등의 투명한 배경을 지원하는 이미지 파일을 제작했다면 아래의 그림과 같이 프로젝트의 리소스 파일에 이미지를 추가합니다. 예제의 코딩 의도는 계기판을 구현하는 것으로 계기판 바탕 이미지 위에 바늘 이미지를 올리고 입력된 각도에 따라 바늘을 회전시켜 보이는 것입니다. ■ 투명 배경의 이미지 겹치기 두개의 이미지를 모두 도구상자의 PictureBox 컨트롤을 통해서 각각 생성하고 프로젝트 리소스 파일에 등록해 두었던 이미지를 등록합..
C# 프로그래밍 과정에서 고객의 요청 때문에 PDF 파일을 만드는 경우도 있지만 프로그램 자체에 PDF 생성 기능이 있으면 여러모로 활용도가 넓어질 수 있습니다. 가장 큰 장점은 보고서 인쇄를 대치할 수 있다는 것입니다. SAP이 배포하고 있는 크리스탈 리포트(Crystal Reports)를 사용하여 보고서 인쇄 기능을 개발할 수도 있지만 필자의 경우에는 SAP이 개발자용 자료를 그냥 다운로드 시켜주지도 않고(복잡한 등록 양식을 요구함) 배포 시점에 SAP의 패키지를 추가로 배포해야하는 부담이 귀찮은 것도 있었지만 생성된 보고서 파일을 부가적으로 활용할 수 있도록 해줌과 동시에 PDF 자체의 인쇄 조절 기능등을 활용할 수 있다는 장점을 보고 PDF를 통한 보고서 출력을 시도하게 되었습니다. PDF 생성을..
C# 에서는 System.Math를 통해서 다양한 수학 함수를 제공하고 있습니다. 그중에서도 자주 사용하는 반올림 연관 함수를 정리해 놓습니다. 기본적인 사용 형태는 다음과 같습니다.반올림 Math.Round(값) Math.Round(값, 소숫점)올림 Math.Ceiling(값)버림 Math.Truncate(값)올림이나 버림의 경우에는 값의 정수부분 만을 결과로 돌려주지만 반올림의 경우에는 소숫점을 지정하지 않는 경우에는 정수 값을 리턴하지만 소숫점을 지정하는 경우 해당 소숫점을 기준으로 반올림한 부동소숫점 값을 돌려줍니다. 숫자를 문자열로 변환하는 format 함수에서도 숫자 형식을 벗어난 소숫점을 반올림 처리하는데 올림이나 내림 처리를 하고 싶을 경우에는 반올림을 감안해서 해당 소숫점의 절반 값을 더..
비주얼스튜디오를 사용하여 화면을 작성하거나 데이터베이스를 다루면서 자주 접하는 창이 있다면 도구 상자(Toolbox) 입니다. 시스템에서 미리 준비한 다양한 컨트롤을 끌어다놓기(Drag & Drop)으로 사용자 화면에 추가하고 해당 컨트롤의 몇가지 속성만 설정하면 간편하게 관련 기능을 사용할 수 있는 방식입니다. 도구 상자의 구성을 살펴보면 공용 컨트롤, 컨테이너, 메뉴 및 도구 모음, 데이터, 구성요소, 인쇄, 대화 상자, WPF 상호 운용성, 보고, VB PowerPacks 등 비주얼스튜디오에서 C#으로 기능을 만들어가는데 필요한 대부분의 것이 잘 준비되어 있으므로 개발자 입장에서는 자신이 구현하려는 기능에 적절한 요소를 잘 찾아서 배치하고 설정하는 것만으로도 프로그래밍을 수행할 수 있는 환경입니다...
C# 프로그램을 개발하다보면 계산 결과를 윈도우 폼의 레이블이나 편집창에 표시하거나 콘솔 모드에서 화면에 출력하는 것으로 기능 수행을 끝내게 되는 것이 보통입니다. C#에서는 변수명.ToString()으로 간단하게 문자열로 변환해서 출력할 수 있지만 소수점이나 폭맞춤등의 필요에 따라 사용자가 원하는 형식으로 변환해야만 하는 경우가 생기는데 이런 경우를 위한 형식 지정 방법을 다룹니다. decimal value = 1234.567m; Console.WriteLine("Default : " + value.ToString()); Console.WriteLine("Basic format : " + value.ToString("C2")); Console.WriteLine("Multi format {0:C2}", ..