2009년 5월 27일 수요일

[C#] 텍스트 박스에 엔터를 입력하면 다른 포커스로 이동

텍스트 박스에 글을 입력한후에 엔터를 누르면 검색이나 다음 텍스트 박스로 이동하게 하려고

MSDN을 검색해 봤다.

 

 

아래 내용은 내가 텍스트 박스를 입력후 엔터를 누르면 Search()를 호출하는것을 보여주는 코드이다.

private void txtWord_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Search();
            }

 

MSDN에 자세히 나와있으니 자세한 사항은 MSDN을 검색해보길 권한다.

http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx

[C#] 윈폼기반 프로그래밍을 할때 Invoke() 이쁘게쓰기!

Invoke 를 써서 델리게이트를 간단히 하는 방법이 있다고 한다.

1곳에서만 메인쓰레드의 권한이 필요할경우, 이 방법을 쓰면 좋다고 한다.

만약 그렇지 않다면, 쓰는데마다 저렇게 선언을 해줘야한다고 한다.

 참고 해보길 바란다.

 

이 포스트를 보고있는 여러분들은, 모두 닷넷 프로그래밍에 관심이 있으시고,

현재도 개발툴로 사용중인 분이실 것이다. 쓰레드기반 프로그래밍을 할때(.Net)에서

폼(엄밀히 말하면 윈도우)의 Child컨트롤(요곳도 윈도우)들의 멤버변수들을 조작

하기 위해서는, 메인쓰레드의 권한이 필요하다. 따라서, 메인쓰레드의 권한이 필요

할경우, this.Invoke() 메서드를 쓰게되는데, 이때 이 메서드를 쓰면, 별별놈의

Delegate를 선언해줘야 하고, 또 선언한 델리게이트의 인스턴스를 할당해, 사용

해야해서 코드가 매우 더러워지는것을 느꼈을것이다.

 

예전에 아는 동생녀석의 C#코드를 보고있던 중. this.Invoke()를 아주 이쁘게

잘 써놓은 것을 발견했다. 물론 그놈은.. 예전부터 프로그래밍을 해왔던지라,

모르는 언어도 없고, 시스템 프로그래밍을 가지고 노는애였다.(__)

아무튼 내가 닷넷프로그래밍을 처음배울때, 그놈에게 C#.Net으로된 채팅서버

및 클라이언트 프로그램의 소스를 봐서, Invoke()메서드를 이쁘게 잘쓰는방법을

우연히 터득하게 되었다. 보통의 사람들이라면 Delegate 선언, 인스턴스할당,

Delegate변수명명 까지의 귀찮은 일을 모두 하겠지만, 이 포스트를 봤다면,

이제부터 그렇게 하지말자^^;

 

일단 사용하는 방법은 아주 간단하다. 그냥 this.Invoke()메서드 인자부분에

new MethodInvoker( delegate() { 코드 })를 써주면 끝이다. 이렇게 처리하게

되면, 저런 귀찮은 방법을 사용하지 않고, 그냥 저기안에 코드만 쓰면된다^^;

물론 저렇게 일자로 쓰면, 안이쁘겠지만, 적절히 엔터누질러주시면,

엄청 이쁜코드가 된다. ^^; 동생녀석이 썼던 코드를 보여주겠다.

 

             this.Invoke(new MethodInvoker(
                 delegate()
                 {
                     strCurTime = string.Format("{0:D2}:{1:D2}:{2:D2}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
                     string[] strData = new string[3];
                     strData[0] = lstLog.Items.Count.ToString();
                     strData[1] = strCurTime;
                     strData[2] = strTLog;
                     lstLog.Items.Add(new ListViewItem(strData));
                 }
                 )
            );

 

이렇게쓰면, 아주이쁘게 써진다, 또한, Form의 전역공간에 델리게이트를 선언할

필요도 없어져서, 전체적으로 코드가 안정적으로 보인다^^;

저 코드는, 채팅서버에서 로그를 추가하는 델리게이트를 기술하는 것이다^^;

물론 이방법은, 이런 델리게이트가 필요한 곳이 1곳일때만 쓰는것을 추천한다.

만약 그렇지 않다면, 쓰는데마다 저렇게 선언을 해줘야한다.(__)

하지만, 1곳에서만 메인쓰레드의 권한이 필요할경우, 저렇게 하는것이

더 바람직하고, 이쁘다^^;

 

[C#] 1차원 배열

배열이란 동일한 데이터 형을 갖는 변수들을 묶어 놓은 것이다.

일반적으로 변수를 선언한 방법은 아래와 같다.

static void Main(string[] args)
{
  int a, b, c, d;
  a=10;
  b=20;
  c=30;
  d=40;
  Console.WriteLine(“{0},{1},{2},{3}”,a,b,c,d);
}

 

이것을 배열로 선언을 하면 아래와 같다.

static void Main(string[] args)
{
  int [] arr ; //배열 선언
arr = new int [4]; //메모리에 할당
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
Console.WriteLine(“{0},{1},{2},{3}”,arr[0],arr[1],arr[2],arr[3]);
}

 

선언과 메모리 할당 초기화를 같이 할 수도 있다.

데이터형 [] 배열 이름;

int[] arr;

 

배열을 선언한 다음에는 메모리에 할당을 해주어야 하는데 이때 배열의 크기도 명시해주어야 한다.

배열의 크기란 배열이 담게 되는 데이터의 개수를 의미하는데 0번부터 시작을 한다

arr = new int [4];

다음과 같은 구조를 가짐

arr[0] arr[1] arr[2] arr[3]

 

많은 자료를 배열로 처리 할 경우 For 문을 이용하거나 foreach문을 이용하면 모든 요소에 인덱스를 하지 않아도 된다.

아래는 For문을 이용한 예시이다. For문을 이용하여 arr의 길이 만큼 수행하는 것이다.

static void Main(string[] args)
{
  int [] arr ; //배열 선언
arr = new int [100]/메모리에 할당
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
//중간생략
for (int i=0; i < arr.Length; i++)
   {
    Console.WriteLine(“arr[{0}]은 {1}”,i,arr[i]);
   }

}


아래는 foreach문을 이용한 예시이다.

foreach문의 구조는 아래와 같다.

foreach(변수의 타입 변수명 in 배열명)
{
명령문
}

foreach문은 for 문과 달리 별도의 조건식이 존재하지 않는다. 배열의 크기만큼 반복하면서 실행이 되는 것이다

static void Main(string[] args)
{
  int [] arr ; //배열 선언
arr = new int [100]/메모리에 할당
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
//중간생략
foreach (int i in arr)
   {
    Console.WriteLine(“{0}”,i);
   }
}

 

[C#] Label의 갯수만큼 배열선언

Label 에 배열 선언

Label 의 갯수만큼 올려놓고

다음과 같이 사용하면 된다. 

Label[] lbl = new Label[] { label1, label2, label3, label4, 
                label5, label6, label7, label8, label9, label10 }; 
            for (int i = 0; i < lbl.Length; i++) 
            { 
                lbl[i].Text = (i + 1).ToString(); 
            }

2009년 5월 26일 화요일

여기에서 다시 블로그를 시작해보려한다.

여기에서 다시 블로그를 시작해보려 한다.

네이버블로그를 이용하다..

구글의 블로거에서.. 주로.. 글들을 올려보고 하다가

좋을것 같아 여기로 옮겨왔다...

앞으로는 여길 주로 해야할것 같다...

 

앞으로 열심히 해봐야겠다... ^^