2016년 8월 28일 일요일
2016년 8월 25일 목요일
2016년 8월 23일 화요일
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][C#,ADO.NET예제]개선된 주소록, C#윈폼,ADO.NET, 계산기소스
[C#,ADO.NET예제]개선된 주소록, C#윈폼,ADO.NET, 계산기소스
- TreeView, MenuStrip 사용하여 메뉴구성
- ListView를 이용하여 Adapter를 사용하지 않고 데이터 출력,수정,삭제,입력
- DataGridView를 사용한 CRUD 구현
- OleDbDataAdapter를 이용한 CRUD 구현 및 Transaction 처리
- Timer, Deligate를 이용한 DataGridView 자동갱신 구현
- MessageFilter를 이용한 ALT+F4 키 막기
- 계산기 기능
- File 로깅
- OpenFileDialog를 이용한 로그파일 보기
감사합니다.
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀]윈도우 메시지박스(MessageBox)실습
윈도우 메시지박스(MessageBox)실습
using System;
using System.Windows.Forms;
namespace Ojc
{
class MessageBoxTest
{
static void Main(string[] args)
{
// 가장 단순한 메시지 박스
MessageBox.Show("메시지");
// 메시지 텍스트와 타이틀을 가지는 메시지 박스
MessageBox.Show("메시지", "타이틀");
// 두개의 버튼(yes, no)를 가지는 메시지 박스
DialogResult result1 = MessageBox.Show("메시지", "타이틀(두 버튼 메시지박스)",
MessageBoxButtons.YesNo);
if (result1 == DialogResult.Yes) Console.WriteLine("YES 클릭");
else Console.WriteLine("NO 클릭");
Console.WriteLine("1. -------------");
// YesNoCancel 버튼, Question icon을 가지는 메시지 박스
DialogResult result2 = MessageBox.Show("메시지",
"타이틀(Question 메시지박스,YesNoCancel)",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question);
if (result2 == DialogResult.Yes) Console.WriteLine("YES 클릭");
else if (result2 == DialogResult.No) Console.WriteLine("NO 클릭");
else if (result2 == DialogResult.Cancel) Console.WriteLine("CANCEL 클릭");
Console.WriteLine("2. -------------");
// YesNoCancel 버튼, Question icon, Default 버튼을 가지는 메시지박스
// 두번째 버튼인 NO버튼을 기본으로 포커스가 설정됨
DialogResult result3 = MessageBox.Show("메시지",
"타이틀(Question,YesNoCancel,Default버튼)",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question, //?로 표시
MessageBoxDefaultButton.Button2);
// 타이틀, 메시지가 우측 정렬되어 표시되는 메시지 박스
// 아래 true는 도움말 버튼 표시여부
MessageBox.Show("메시지",
"타이틀(메시지 우측 정렬,Error아이콘)",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Error, //X로표시
MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign,
true);
// exclamation icon을 가지는 메시지 박스
MessageBox.Show("메시지",
"타이틀(exclamation icon)",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation); //!로 표시
}
}
}
[결과]
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][C#링크예제]메소드쿼리식에서 Aggregate사용간단예제
[C#링크예제]메소드쿼리식에서 Aggregate사용간단예제
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqAggregationExam
{
class Program
{
static void Main(string[] args)
{
//Aggregate는 값을 포워드 하면서 주어진 연산을 수행한다.
var numbers = new int[] { 1, 2, 3, 4, 5 };
// 1*2 한 후 결과를 3과 곱하고, 다시 결과를 4와 곱함...
var result = numbers.Aggregate((a, b) => a * b);
Console.WriteLine(result);
// 10은 SEED, 10+1 결과를 2와 더하고 다시 결과를 3과 더함...
result = numbers.Aggregate(10, (a, b) => a + b);
Console.WriteLine(result);
}
}
}
[결과]
120
25
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][예제]델리게이트,람다식문자열정렬,뒤짚기,대문자변경
[예제]델리게이트,람다식문자열정렬,뒤짚기,대문자변경
소문자로 문자열을 입력받아
- 첫글자만 대문자로 변환
- 마지막 글자만 대문자로 변환
- 전체문자열을 대문자로 변환
- 문자열을 뒤짚기
- 문자열 내의 각 문자를 알파벳 순으로 오름차순 정렬
델리게이트, 람다식를 이용하여 구현예제.
소문자로 문자열을 입력받아
- 첫글자만 대문자로 변환
- 마지막 글자만 대문자로 변환
- 전체문자열을 대문자로 변환
- 문자열을 뒤짚기
- 문자열 내의 각 문자를 알파벳 순으로 오름차순 정렬
델리게이트, 람다식를 이용하여 구현예제.
참고하세요
using System;
using System.Linq;
class Program
{
delegate string MyStringDelidate(string s);
static string UppercaseFirst(string s)
{
char[] buf = s.ToCharArray();
buf[0] = char.ToUpper(buf[0]);
return new string(buf);
}
static string UppercaseLast(string s)
{
char[] buf = s.ToCharArray();
buf[buf.Length - 1] = char.ToUpper(buf[buf.Length - 1]);
return new string(buf);
}
static string UppercaseAll(string s)
{
return s.ToUpper();
}
static string ReverseAll(string s)
{
char[] buffer = s.ToCharArray();
return new String(buffer.Reverse().ToArray());
}
static string MySort(string s)
{
char[] buf = s.ToCharArray();
Array.Sort<char>(buf);
return new String(buf);
}
static void Output(string s, MyStringDelidate deli)
{
Console.Write("Before: {0}", s);
Console.WriteLine(", After: {0}", deli(s));
}
static void Main()
{
Console.WriteLine("영문자 소문자로 입력하세요...");
string str = Console.ReadLine();
Console.WriteLine();
Output(str, new MyStringDelidate(UppercaseFirst));
Output(str, new MyStringDelidate(UppercaseLast));
Output(str, new MyStringDelidate(UppercaseAll));
Output(str, new MyStringDelidate(ReverseAll));
Output(str, new MyStringDelidate(MySort));
}
}
[결과]
영문자 소문자로 입력하세요...
hello
Before: hello, After: Hello
Before: hello, After: hellO
Before: hello, After: HELLO
Before: hello, After: olleh
Before: hello, After: ehllo
===============================================================
using System;
using System.Linq;
class Program
{
delegate string MyStringDelidate(string s);
static void Output(string s, MyStringDelidate deli)
{
Console.Write("Before: {0}", s);
Console.WriteLine(", After: {0}", deli(s));
}
static void Main()
{
Console.WriteLine("영문자 소문자로 입력하세요...");
string str = Console.ReadLine();
Console.WriteLine();
Output(str, s =>
{
char[] buf = s.ToCharArray();
buf[0] = char.ToUpper(buf[0]);
return new string(buf);
});
Output(str, s =>
{
char[] buf = s.ToCharArray();
buf[buf.Length - 1] = char.ToUpper(buf[buf.Length - 1]);
return new string(buf);
});
Output(str, s =>
{
return s.ToUpper();
});
Output(str, s =>
{
char[] buffer = s.ToCharArray();
return new String(buffer.Reverse().ToArray());
});
Output(str, s =>
{
char[] buf = s.ToCharArray();
Array.Sort<char>(buf);
return new String(buf);
});
}
}
[결과]
영문자 소문자로 입력하세요...
korea
Before: korea, After: Korea
Before: korea, After: koreA
Before: korea, After: KOREA
Before: korea, After: aerok
Before: korea, After: aekor
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][델리게이트간단예제]람다식, 델리게이트 invoke
[델리게이트간단예제]람다식, 델리게이트 invoke
using System;
class Program
{
delegate void Deli(string s);
static void Main()
{
// Specify delegate with lambda expression.
Deli d = (v) => Console.WriteLine(v);
//Invoke delegate.
d.Invoke("OJC");
// Specify delegate with new Constructor
Deli d1 = new Deli(d);
//Invoke delegate.
d1.Invoke("OJC");
// Specify delegate with method name
Deli d2 = d;
//Invoke delegate.
d2.Invoke("OJC");
}
static void d(string s)
{
Console.WriteLine(s);
}
}
[결과]
OJC
OJC
OJC
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][C#델리게이트 간단 예제]
[C#델리게이트 간단 예제]
using System;
// 델리게이트 작성 방법
// 1. 선언
// 2. 생성
// 3. 호출
//
// 델리게이트는 메소드를 참조하고 있는 것으로
// 런타임시 델리게이트가 참조하는 메소드를 실행하고
// 구현을 동적으로 할 수 있는 콜백 함수를 구현하는 용도
class Program
{
public delegate int MyDelegate(int i, int j);
public static void Main()
{
//TakesADelegate 메소드를 부르면서 인자로 델리게이트를
//생성하고 델리게이트의 인자로는 첨조할 메소드명을 넣어준다.
TakesADelegate(new MyDelegate(Add));
TakesADelegate(new MyDelegate(Minus));
TakesADelegate(new MyDelegate(Gop));
TakesADelegate(new MyDelegate(Nanugi));
}
public static void TakesADelegate(MyDelegate SomeFunction)
{
//컴파일 시점에 할일이 지정되지 않고 런타임중에
//메소드 인자로 대입되는 델리게이트에 의해 할 일이 결정된다.
Console.WriteLine(SomeFunction(1,2));
}
public static int Add(int i, int j)
{
return i + j;
}
public static int Minus(int i, int j)
{
return i - j;
}
public static int Gop(int i, int j)
{
return i * j;
}
public static int Nanugi(int i, int j)
{
return i / j;
}
}
[결과]
3
-1
2
0
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][C#쓰레드예제]ThreadStart, ParameterizedThreadStart 예제
[C#쓰레드예제]ThreadStart, ParameterizedThreadStart 예제
첫번째 쓰레드는 1~10 까지의 합을, 두번째 쓰레드는 11~20 까지의 합을.... 아홉번째 쓰레드는
91~100 사이의 합을 구하는데 아래 두 방법으로 프로그램을 작성하세요.
- ParameterizedThreadStart 델리게이트를 이용하여 작성하세요.
- ThreadStart 델리게이트를 이용하여 작성하세요
ParameterizedThreadStart 델리게이트는 모양은 아래와 같다.
public delegate void ParameterizedThreadStart(object obj);
하나의 파라미터를 object 형식으로 전달하기 때문에 여러 개의 파라미터를 전달하기 위해서는 클래스나 구조체를 만들어 객체를 생성해서 전달할 수 있다.
파라미터의 전달은 Thread.Start() 메서드를 호출할 때 파라미터를 전달한다.
참고로 ThreadStart를 이용해 파라미터를 전달하는 방법은 일단 델리게이트 메서드는 파라미터를 받아들이지 않으므로 그 메서드 안에서 다른 메서드를 호출하면서 파라미터를 전달하는 방식을 사용할 수 있다.
1. ParameterizedThreadStart 델리게이트를 이용하여 작성
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
static int mysum = 0;
static void DoSomething(object n)
{
int sum = 0;
int[] number = (int[])n;
for (int i = number[0]; i <= number[1]; i++)
{
sum += i;
}
mysum += sum;
}
static void Main(string[] args)
{
Thread t1 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t2 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t3 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t4 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t5 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t6 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t7 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t8 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t9 = new Thread(new ParameterizedThreadStart(DoSomething));
Thread t10 = new Thread(new ParameterizedThreadStart(DoSomething));
t1.Start(new int[] { 1, 10 });
t2.Start(new int[] { 11, 20 });
t3.Start(new int[] { 21, 30 });
t4.Start(new int[] { 31, 40 });
t5.Start(new int[] { 41, 50 });
t6.Start(new int[] { 51, 60 });
t7.Start(new int[] { 61, 70 });
t8.Start(new int[] { 71, 80 });
t9.Start(new int[] { 81, 90 });
t10.Start(new int[] { 91, 100 });
t1.Join();
t2.Join();
t3.Join();
t4.Join();
t5.Join();
t6.Join();
t7.Join();
t8.Join();
t9.Join();
t10.Join();
Console.Write("1부터50까지의 합은{0}::", mysum);
}
}
}
2. ThreadStart 델리게이트를 이용하여 작성
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication3
{
class Program
{
static int mysum = 0;
static void Sum(object n)
{
int sum = 0;
int[] number = (int[])n;
for (int i = number[0]; i <= number[1]; i++)
{
sum += i;
}
mysum += sum;
}
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(() => Sum(new int[] { 1, 10 })));
Thread t2 = new Thread(new ThreadStart(() => Sum(new int[] { 11, 20 })));
Thread t3 = new Thread(new ThreadStart(() => Sum(new int[] { 21, 30 })));
Thread t4 = new Thread(new ThreadStart(() => Sum(new int[] { 31, 40 })));
Thread t5 = new Thread(new ThreadStart(() => Sum(new int[] { 41, 50 })));
Thread t6 = new Thread(new ThreadStart(() => Sum(new int[] { 51, 60 })));
Thread t7 = new Thread(new ThreadStart(() => Sum(new int[] { 61, 70 })));
Thread t8 = new Thread(new ThreadStart(() => Sum(new int[] { 71, 80 })));
Thread t9 = new Thread(new ThreadStart(() => Sum(new int[] { 81, 90 })));
Thread t10 = new Thread(new ThreadStart(() => Sum(new int[] { 91, 100 })));
t1.Start(); t2.Start(); t3.Start(); t4.Start(); t5.Start();
t6.Start(); t7.Start(); t8.Start(); t9.Start(); t10.Start();
t1.Join(); t2.Join(); t3.Join(); t4.Join(); t5.Join();
t6.Join(); t7.Join(); t8.Join(); t9.Join(); t10.Join();
Console.WriteLine(mysum);
}
}
}
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][C#강좌]ALT+F4(윈도우종료)키 막기,메시지필터링,IMessageFilter,Application.AddMessageFilter
[C#강좌]ALT+F4(윈도우종료)키 막기,메시지필터링,IMessageFilter,Application.AddMessageFilter
Application 클래스의 AddMessageFilter() 메소드는 응용프로그램에 메시지 필터를 등록하며 이 메소드의 매개변수로 IMessageFilter를 구현한 클래스의 인스턴스를 매개변수로 받으며 IMessageFilter의 PreFilterMessage를 구현해야 한다.
[예제]
using System.Windows.Forms;
using System;
namespace ConsoleApplication1
{
public class Program : Form
{
static void Main()
{
Application.AddMessageFilter(new AltF4Filter()); // Add a message filter
Application.Run(new Program());
}
}
public class AltF4Filter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
const int WM_SYSKEYDOWN = 0x0104;
if (m.Msg == WM_SYSKEYDOWN)
{
bool alt = ((int)m.LParam & 0x20000000) != 0;
if (alt && (m.WParam == new IntPtr((int)Keys.F4)))
Console.WriteLine("ALT+F4 Filtering됨.");
return true; // eat it!
}
return false;
}
}
}
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][C#예제]델리게이트 체인/멀티캐스팅예제,닷넷Delegate,Delegate.Combine
[C#예제]델리게이트 체인/멀티캐스팅예제,닷넷Delegate,Delegate.Combine
델리게이트 체인은 하나의 델리게이트에 여러 델리게이트를 체인처럼 연결해서 한번에 실행할 수 있는 방법을 제공한다.
Delegate.Combine으로 여러 델리게이트를 연결하는데 이는 델리게이트 멀티캐스팅 형태로 변환 가능하다. 아래 예제를 참조하자.
using System;
namespace ConsoleApplication6
{
delegate void OnjDelegate(int a, int b);
class MainApp
{
static void Plus(int a, int b) { Console.WriteLine("{0} + {1} = {2}", a, b, b); }
static void Minus(int a, int b) { Console.WriteLine("{0} - {1} = {2}", a, b, a - b); }
void Multiplication(int a, int b) { Console.WriteLine("{0} * {1} = {2}", a, b, a * b); }
void Division(int a, int b) { Console.WriteLine("{0} / {1} = {2}", a, b, a / b); }
static void Main()
{
MainApp m = new MainApp();
OnjDelegate CallBack = (OnjDelegate)Delegate.Combine(
new OnjDelegate(MainApp.Plus),
new OnjDelegate(MainApp.Minus),
new OnjDelegate(m.Multiplication),
new OnjDelegate(m.Division));
CallBack(4, 3);
Console.WriteLine("-----------------");
OnjDelegate CallBack2 = new OnjDelegate(MainApp.Plus);
CallBack2 += new OnjDelegate(MainApp.Minus);
CallBack2 += new OnjDelegate(m.Multiplication);
CallBack2 += new OnjDelegate(m.Division);
CallBack2(4, 3);
Console.WriteLine("-----------------");
OnjDelegate CallBack3_1 = new OnjDelegate(MainApp.Plus);
OnjDelegate CallBack3_2 = new OnjDelegate(MainApp.Minus);
OnjDelegate CallBack3_3 = new OnjDelegate(m.Multiplication);
OnjDelegate CallBack3_4 = new OnjDelegate(m.Division);
OnjDelegate CallBack3 = CallBack3_1 + CallBack3_2 + CallBack3_3 + CallBack3_4;
CallBack3(4, 3);
}
}
}
[결과]
4 + 3 = 3
4 - 3 = 1
4 * 3 = 12
4 / 3 = 1
-----------------
4 + 3 = 3
4 - 3 = 1
4 * 3 = 12
4 / 3 = 1
-----------------
4 + 3 = 3
4 - 3 = 1
4 * 3 = 12
4 / 3 = 1
[C#강좌,닷넷강좌,IT실무교육★탑크리에듀][C#배열의 최대값 및 버블정렬을 이용하여 정렬예제]
[C#배열의 최대값 및 버블정렬을 이용하여 정렬예제]
버블정렬(Bubble sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 O(n^2)로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다.
using System;
using System.Linq;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("배열요소를 콤마를 기준으로 입력하세요. 예) 1,10,7,6,5");
string str = Console.ReadLine();
string[] sArray = str.Split(',');
Console.WriteLine("<<<<< 입력받은 배열 출력...>>>>>");
foreach (string s in sArray)
{
Console.Write(s + " ");
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("<<<<< 최대값은...>>>>>");
int[] iArray = Array.ConvertAll(sArray, s => int.Parse(s));
int max = iArray.Max();
Console.WriteLine("MAX VALUE : " + max);
Console.WriteLine();
//버블정렬
for (int i = 1; i < iArray.Length; i++)
{
for (int j = 0; j < i; j++)
{
if (iArray[j] > iArray[i])
{
int tmp = iArray[i];
iArray[i] = iArray[j];
iArray[j] = tmp;
}
}
}
Console.WriteLine("<<<<< 버블정렬 후 배열 출력...>>>>>");
foreach (int i in iArray)
{
Console.Write(i + " ");
}
Console.WriteLine();
}
}
}
[결과]
배열요소를 콤마를 기준으로 입력하세요. 예) 1,10,7,6,5
1,10,7,6,5
<<<<< 입력받은 배열 출력...>>>>>
1 10 7 6 5
<<<<< 최대값은...>>>>>
MAX VALUE : 10
<<<<< 버블정렬 후 배열 출력...>>>>>
1 5 6 7 10
피드 구독하기:
글 (Atom)