C#
-
C# 숫자 세자리마다 콤마(쉼표)찍기닷넷/C# 2018. 8. 2. 16:51
C#에서 숫자 세자리마다 콤마(쉼표)찍는 방법 다음은 C#에서 숫자를 문자열로 바꾸고, 세자리 마다 콤마(쉼표)가 입력되게 하는 방법이다. int i = 100000000; string number = string.Format("{0:#,###}", i); 결과: 100,000,000 그런데 여기서 만약 i가 0 또는 null이라면 값이 공백으로 나온다. int i = 0; string number = string.Format("{0:#,###}", i); 결과: 공백이 아닌 0으로 나오게 하려면 다음과 같이 하면 된다. int i = 0; string number = string.Format("{0:#,##0}", i); 결과: 0
-
C# DataGridView 엑셀 출력 빠르게 하기 (복사&붙여넣기)닷넷/WinForms 2018. 7. 20. 16:13
이전에 포스팅한 2017/05/24 - [프로그래밍/C#] - C# DataGridView 데이터 엑셀파일에 저장 using oledb 은 데이터그리드뷰의 데이터를 엑셀파일로 출력할 때 속도가 느리다는 단점이 있다. 어떻게 하면 빠르게 출력할 수 있을까... 데이터그리드뷰 자체를 복사해서 엑셀파일에 그대로 옮겨놓을 수 있을까... 하다가 찾아낸 방법이다. 아래의 ExportExcel 메소드를 사용하면 된다. private void ExportExcel(string filename) { // Copy from DataGridView // 데이타그리드뷰를 전체선택하고, dataGridView1.SelectAll(); // 클립보드에 복사한다. DataObject dataObj = dataGridView1.G..
-
C# 폼 캡처, 자식 폼 캡처닷넷/C# 2018. 7. 18. 09:53
아래 ScreenCaptureForm 메소드를 사용하면 쉽게 폼을 캡처 할 수 있다.아래 메소드를 사용할 때 폼의 시작위치와 폼 사이즈만 넘겨주면 되는 것이다.private void ScreenCaptureForm(Point _point, Size _size){ Rectangle rectangle = new Rectangle(_point, _size); Bitmap bitmap = new Bitmap(rectangle.Width, rectangle.Height); Graphics g = Graphics.FromImage(bitmap); g.CopyFromScreen(rectangle.Left, rectangle.Top, 0, 0, rectangle.Size); bitmap.Save(@"C:\test.pn..
-
C# goto문 작성방법닷넷/C# 2018. 6. 28. 17:01
goto는 프로그램의 흐름을 바꾸는 명령으로 어떤 상황일 때 코드의 특정부분으로 가서 동작하게끔 할 수 있습니다. 코드의 흐름을 비직관적으로 만들 수 있고, 디버깅과 유지보수를 어렵게 할 수 있으므로 goto문을 쓰지 않는 걸 권장 받아 왔고 그렇게 교육 받아 왔지만 잘 쓰면 약이고, 잘못 쓰면 독약인 것처럼 goto도 그러하기 때문에 현재 시점에서는 용도에 맞게, 의도에 맞게 잘 쓰면 아무런 문제도 되지 않습니다. 단, 이게 무슨 용도로, 의도로 쓰였는지 주석은 꼭 달아주도록 합시다! goto문 작성방법 1. 레이블(label)을 정의합니다. 레이블은 코드 내의 특정 위치를 식별하는 식별자입니다. 레이블은 콜론(:)으로 끝나는 형식으로 작성됩니다. 2. goto 키워드 뒤에 이동하려는 레이블 이름을 지..
-
C# SqlDependency 사용 중에...닷넷/C# 2018. 6. 21. 16:01
아래 사이트의 설명이 너무 좋으므로 따로 설명은 하지 않는다.http://www.csharpstudy.com/DevNote/Article/11 대신에 위 사이트 설명에서 추가하고 싶은 내용. [SQL] 문을 어떻게 써야하는지에 대한 몇가지 제약 조건들 중에 하나 1. where절이나 order by 등에 나오는 칼럼타입이 DateTime이면 invalid 뱉어냄.따라서 Convert(varchar(10), MachineTime, 120) 이런 식으로 칼럼 타입을 변경하여 쿼리를 짜야 한다.
-
C# 텍스트박스에 숫자만 입력되게 하기닷넷/WinForms 2018. 6. 7. 17:25
텍스트박스에서 키를 눌렀을 때 숫자만 입력되게 하는 방법. private void txtBox1_KeyPress(object sender, KeyPressEventArgs e){ //숫자만 입력되도록 필터링 if(!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back))) //숫자와 백스페이스를 제외한 나머지를 바로 처리 { e.Handled = true; }} 출처: http://terrorjang.tistory.com/39 [개발자 공간]
-
C# DateTimePicker 기본값 설정하기닷넷/WinForms 2018. 3. 27. 10:01
dateTimePicker1.Value = new DateTime(int.Parse("년도"), int.Parse("월"), int.Parse("일")); 예제.1. 기본값을 현재 월의 5일로 설정(프로그램을 실행하면 dateTimePicker1은 항상 현재 월의 28일로 나오게.) dateTimePicker1.Value = new DateTime(int.Parse(DateTime.Now.ToString("yyyy") , int.Parse(DateTime.Now.ToString("MM") , 5); 2. 기본값을 현재의 다음 달의 말일-2 로 설정 (프로그램을 실행하면 dateTimePicker1은 항상 현재의 다음 달 말일-2 로 나오게.예를 들어 현재 2018년 3월 27일의 다음 달 말일-2는 20..
-
C# 바이너리 파일 읽기 (한글 포함)닷넷/C# 2018. 1. 9. 20:53
2017/05/26 - [프로그래밍/C#] - C# 바이너리 파일 읽기 및 클래스에 담기전에 포스팅한 것인데 이 방법으론 한글이 저장된 바이너리 파일은 인코딩할 수 없었다. 한글이 포함된 바이너리 파일 읽기 // StreamReader를 통해 바이너리 파일을 읽는다.// 이때 한글이 깨지지 않게 가져오려면 Encoding 코드 페이지는 949로 한다. using (StreamReader sr = new StreamReader(fname, Encoding.GetEncoding(949))){ string s = sr.ReadToEnd(); // 문자열을 쪼개서 배열에 담는다. // 정규식을 사용해도 될 것 같은데, 일단 바이너리 파일에서 불필요한 식별자들을 기준으로해서 쪼갬. string[] ss = s.S..
-
[개발중] 원격제어 프로그램 4프로젝트 2017. 11. 10. 17:56
저번에 클라이언트 프로그램에서 서버에 접속하면 대략적으로 서버 프로그램에 클라이언트 정보가 나올 수 있게 해놨다. 서버에서 Start 버튼을 눌러 클라이언트에서 접속하길 기다린다.그리고 클라이언트에 접속하면 클라이언트에서 넘긴 값을 dataGridView에 바인딩한다. 서버에서 프로세스 종료 명령을 받기 위해 Start(Stop) 버튼을 추가 하여 클라이언트 프로그램에 서버기능을 추가했다. 여기까지, 서버와 클라이언트 간에 서로 접속하는 것에는 문제가 없는 것으로 보인다. 서버에서 클라이언트에 실행 중인 프로세스를 중지할 수 있게 코딩했고,서버에서 프로레스 리스트에서 중지할 프로세스를 선택 하고 Connection 버튼을 누르면클라이언트 리스트에서 IP를 가져오고, string pp = dataGridV..
-
C# DataGridView를 Database에 동기화하는 방법 (InsertCommand, UpdateCommand, DeleteCommand 사용하기)닷넷/WinForms 2017. 10. 20. 09:12
DataGridView, RadGridView 등에서 데이터베이스에 있는 테이블을 그리드뷰에 바인딩하고 그리드뷰에서 데이터를 수정하거나, 추가하거나, 삭제하거나 할 때 각각 UpdateCommand, InsertCommand, DeleteCommand를 사용하면 그동안 써왔던, 익히 알고 있었을 ExecuteNonQuery 로 일일이 쿼리를 줘서 데이터베이스의 데이터를 변경하는 것보다 더욱 수월하게 작업을 할 수 있다. 그러니까, 그리드뷰에서 수정할 때마다 수정버튼을 누르거나, 추가할 때마다 추가버튼을 누르지 않아도 버튼은 마지막에 딱 한번만 누르면 데이터베이스에 그리드뷰에서 수정한 것이 그대로 수정이 되고, 추가한 것은 추가되고, 삭제된 것은 삭제된다. InsertCommand, UpdateComman..
-
C# AES 256 암호화와 복호화 코드닷넷/C# 2017. 9. 14. 14:23
#region 암호화 & 복호화 private string AESEncrypt256(string _text) { string Password = "jasmintime"; // 인증키 RijndaelManaged RijndaelCipher = new RijndaelManaged(); byte[] PlainText = Encoding.Unicode.GetBytes(_text); byte[] Salt = Encoding.ASCII.GetBytes(Password.Length.ToString()); PasswordDeriveBytes SecretKey = new PasswordDeriveBytes(Password, Salt); ICryptoTransform Encryptor = RijndaelCipher.Cre..
-
C# 현재 실행 중인 프로세스 목록닷넷/C# 2017. 9. 8. 10:25
string procName = string.Empty;foreach (System.Diagnostics.Process proc in System.Diagnostics.Process.GetProcesses()){ if (proc.MainWindowHandle != IntPtr.Zero) { if (proc.MainWindowTitle == "") continue; procName = string.Format("{0},{1}", procName, proc.MainModule.FileName); }} 이렇게 하면 프로세스의 파일 경로까지 다 나와서 프로세스 이름만 검출하려고 하는 경우엔문자열을 쪼개는 것이 좋겠다. string procList = string.Empty;string procName = str..
-
How to format a datetime with slash in C#닷넷/C# 2017. 9. 5. 15:13
Current Date and Time : 9 / 5, 2017 PM 3:00:00 yyyy : Year (2017) / yyy : Year (2017) / yy : year (17)MM : Month (09) / M (9)dd : Day (05) / d (5)HH : Hour (15) / hh : hour (03) / h : hour (3)mm : Minute (00) / m (0)ss : Second(30) Example: 1.DateTimePicker Formatting :dateTimePicker1.Format = DateTimePickerFormat.Custom; dateTimePicker1.CustomFormat = "yyyy-MM-dd"; => 2017-09-05 2.dateTimePick..
-
C# Local host 가져오기 (로컬 IP 주소 확인하기)닷넷/C# 2017. 8. 24. 17:54
using System.Net; using System.Net.Sockets; private string GetLocalIP() { string myIP = ""; IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); foreach (IPAddress ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { myIP = ip.ToString(); } } return myIP; }
-
C# CrossThread 오류가 발생할 때닷넷/WinForms 2017. 8. 7. 15:00
스레드로 작업을 돌리는 도중 CrossThread 오류가 날 때가 있다.그 이유는 스레드 간에 간섭이 일어났기 때문이다.프로그램이 실행될 때 눈에 보이는 전부가 이미 스레드 하나이다. 이걸 메인스레드라 부른다.(프로세스는 이미 스레드 하나를 가지고 있는 것임.) 그 이후에 우리가 추가적으로 작업할 때 스레드를 선언하여 사용하는데 (이하 A 스레드)A 스레드에서 메인스레드에 있는 작업들 가령 TextBox나 ListBox 같은 컨트롤에 데이터를 입력하게 되는 경우A 스레드에서 메인스레드로의 간섭이 일어나 CrossThread 오류가 나는 것이다. 이를 해결하려면 대리자(delegate)를 이용하면 된다. 다음은 리스트박스에 텍스트를 추가하는 델리게이트와 메소드이며 A 스레드 안에서 리스트박스에 텍스트를 추..