닷넷/WinForms
-
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# 텍스트박스에 숫자만 입력되게 하기닷넷/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# 간단하게 구현한 CheckBox ComboBox (with CheckedListBox)닷넷/WinForms 2018. 3. 15. 19:01
콤보박스 아이템들에 체크박스를 추가하는 방법들은 구글링하면 나오긴 하는데 참고해서 직접 구현하려니 잘 안 된다. 그래서 콤보박스와 체크드리스트박스 두개를 활용하는 방식으로 구현하였다. 디자인(Designer.cs) // 콤보박스, // 1) 드롭다운스타일은 심플로 한다. // 2) 클릭이벤트가 있다. // cbGroups // this.cbGroups.BackColor = System.Drawing.Color.AliceBlue; this.cbGroups.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; this.cbGroups.FormattingEnabled = true; this.cbGroups.Items.AddRange(new object[] {..
-
C# 엑셀파일 가져오기 using Microsoft.Office.Interop.Excel (DataGrdiVeiw에 바인딩 포함)닷넷/WinForms 2018. 1. 10. 13:21
2017/05/22 - [프로그래밍/C#] - C# 엑셀파일 가져오기 using OleDb이전 글에서는 OleDb를 이용해 엑셀파일을 불러왔다면 이번 글은 엑셀 라이브러리를 이용해 엑셀파일을 불러 오는 방법이다. 먼저 엑셀 라이브러리를 추가한다. 1) 참조에서 오른쪽 마우스클릭 -> 참조 추가 클릭 2) 어셈블리에서 확장에 보면 Microsoft.Office.Interop.Excel 이 있다.버전 별로 여러 개가 있다면 그 중에 하나만 선택 하고 확인을 눌러 추가해준다.없다면 엑셀이 설치되어 있지 않은 것이다. 엑셀을 설치하거나 dll 파일을 구한다. 3) 소스 파일에 using Microsoft.Office.Interop.Excel; 를 입력한다. 4) 그러나 System에 선언되어 있는 클래스나 메소..
-
C# DataGridView를 Database에 동기화하는 방법 (InsertCommand, UpdateCommand, DeleteCommand 사용하기)닷넷/WinForms 2017. 10. 20. 09:12
DataGridView, RadGridView 등에서 데이터베이스에 있는 테이블을 그리드뷰에 바인딩하고 그리드뷰에서 데이터를 수정하거나, 추가하거나, 삭제하거나 할 때 각각 UpdateCommand, InsertCommand, DeleteCommand를 사용하면 그동안 써왔던, 익히 알고 있었을 ExecuteNonQuery 로 일일이 쿼리를 줘서 데이터베이스의 데이터를 변경하는 것보다 더욱 수월하게 작업을 할 수 있다. 그러니까, 그리드뷰에서 수정할 때마다 수정버튼을 누르거나, 추가할 때마다 추가버튼을 누르지 않아도 버튼은 마지막에 딱 한번만 누르면 데이터베이스에 그리드뷰에서 수정한 것이 그대로 수정이 되고, 추가한 것은 추가되고, 삭제된 것은 삭제된다. InsertCommand, UpdateComman..
-
C# CrossThread 오류가 발생할 때닷넷/WinForms 2017. 8. 7. 15:00
스레드로 작업을 돌리는 도중 CrossThread 오류가 날 때가 있다.그 이유는 스레드 간에 간섭이 일어났기 때문이다.프로그램이 실행될 때 눈에 보이는 전부가 이미 스레드 하나이다. 이걸 메인스레드라 부른다.(프로세스는 이미 스레드 하나를 가지고 있는 것임.) 그 이후에 우리가 추가적으로 작업할 때 스레드를 선언하여 사용하는데 (이하 A 스레드)A 스레드에서 메인스레드에 있는 작업들 가령 TextBox나 ListBox 같은 컨트롤에 데이터를 입력하게 되는 경우A 스레드에서 메인스레드로의 간섭이 일어나 CrossThread 오류가 나는 것이다. 이를 해결하려면 대리자(delegate)를 이용하면 된다. 다음은 리스트박스에 텍스트를 추가하는 델리게이트와 메소드이며 A 스레드 안에서 리스트박스에 텍스트를 추..
-
C# 프로그램 실행 중복방지닷넷/WinForms 2017. 4. 26. 17:24
Program.cs 파일에int thisID = System.Diagnostics.Process.GetCurrentProcess().Id; // 현재 기동한 프로그램 id // 실행 중인 프로세스 중에서 현재 기동한 프로그램과 같은 이름을 가진 프로그램 수집System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("Process Name"); if (p.Length > 1){ for (int i = 0; i
-
C# 윈폼에서 같은 컨트롤들을 한번에 제어하는 방법닷넷/WinForms 2016. 8. 18. 16:51
예를 들면 폼에 있는 모든 TextBox의 Text를 지울 때 다음과 같이 작성한다. foreach (Control c in this.Controls) { TextBox tb = c as TextBox; if (tb != null) { tb.Text = ""; } } 즉, // 컨트롤이 메인폼에 있을 때 foreach (Control c in this.Controls) { 컨트롤 tb = c as 컨트롤; if (tb != null) { // 작업 } } // 컨트롤이 그룹박스에 있을 때 foreach (Control c in groupBox1.Controls) { 컨트롤 tb = c as 컨트롤; if (tb != null) { // 작업 } }
-
C# 컨트롤 사이즈에 맞춰서 폰트 크기 자동조절닷넷/WinForms 2016. 8. 12. 17:12
Label로 예를 들면 속성 중에 Autosize를 true로 하면 폰트 크기에 따라서 Label의 크기가 달라지는데 반대로 Autosize를 false로 하고, Label의 사이즈에 따라서 글씨 크기를 조절하는 방법은 다음과 같다. public Font AutoFontSize(Label label, String text) { Font ft; Graphics gp; SizeF sz; Single Faktor, FaktorX, FaktorY; gp = label.CreateGraphics(); sz = gp.MeasureString(text, label.Font); gp.Dispose(); FaktorX = (label.Width) / sz.Width; FaktorY = (label.Height) / sz..
-
C# 폼 이동 방법닷넷/WinForms 2016. 7. 19. 18:53
폼의 타이틀을 없앴거나 타이틀 외에도 다른 부분을 클릭해서 폼을 움직이게하고자 한다면아래와 같이 코딩하면 된다. private bool onDrag = false; private Point point0; private void frmMain_MouseDown(object sender, MouseEventArgs e) { this.onDrag = true; this.point0 = new Point(e.X, e.Y); } private void frmMain_MouseMove(object sender, MouseEventArgs e) { if (this.onDrag == false) return; int x0 = this.Location.X; int y0 = this.Location.Y; int dx = ..
-
C# WindowsForm에서 배경 투명하게 하는 방법닷넷/WinForms 2016. 7. 19. 18:21
WindowsForm의 특정부분만 투명하게 하는 방법은폼 속성의 TransparencyKey을 이용하면 된다. 예를 들어 FormBorderStyle을 None으로 하고 배경이미지를 넣었을 경우에 아래와 같이 이미지 외의 배경이 폼색으로 되는데 이 것을 투명하게 해주려면 폼 속성에서 BackColor와 TransparencyKey를 같은 색상으로 맞추면 된다. 이 외에 특정영역만 투명하게 하고자 한다면 레이블이나 패널등을 이용해레이블 또는 패널의 BackColor 속성과 폼의 TransparencyKey 속성을 같은 색상으로 해주면 된다.
-
C# ComboBox 아이템 추가닷넷/WinForms 2016. 7. 5. 13:48
1. Class 추가 (ComboBoxItem.cs 만들어서 아래의 코드 추가하기) public class ComboBoxItem { public string Text { get; set; } public object Value { get; set; } public override string ToString() { return Text; } } 2. void _ComboBoxItem() { ComboBox cbx = new ComboBox(); cbx.DisplayMember = "Text"; cbx.ValueMember = "Value"; List list = new List(); ComboBoxItem item = new ComboBoxItem(); item.Text = ""; item.Value ..
-
C# TextBox 자동 완성닷넷/WinForms 2016. 7. 5. 13:46
1. Collection Add AutoCompleteStringCollection autoCollection = new AutoCompleteStringCollection(); // Collection 하나씩 추가 autoCollection.Add("Collection1"); autoCollection.Add("Collection2"); autoCollection.Add("Collection3"); //Collection 배열로 추가 autoCollection.AddRange(new string[] { Collection1, Collection2, Collecion3 }); textBox1.AutoCompleteCustomSource = autoCollection; textBox1.AutoComplet..