VC# Windows Forms Application

.NET2008

Visual C# Windows Forms Application 프로젝트 새로 만들기

MFC Dialog-based App 프로젝트 새로 만들기


  • 메뉴에서 File->New->Project->Visual C# 템플릿->Windows Forms Application를 선택한 후 “프로젝트 이름(예를 들어, ConsoleApplication1)”을 적고 확인버튼을 누르면 빈폼 프로젝트가 생성된다.

사용자 삽입 이미지사용자 삽입 이미지

코드 추가



  • Toolbox(도구상자) 에서 컨트롤을 선택(예를 들어, Label 또는 Button)하여 Dialog기반의 Form 안에 추가하여 편집한다.

사용자 삽입 이미지


컨트롤에 이벤트 추가하기
사용자 삽입 이미지

  • 컨트롤 (예를들어, 버튼을 더블클릭하면 또는 이벤트목록중 Click이벤트에 더블클릭하면)에 클릭 이벤트에 대한 이벤트핸들러에 내용(예를 들어, 레이블의 Text를 “Button Clicked”)을 작성한다.

        private void button1_Click(object sender, EventArgs e)
        {
            // button1을 클릭하면 label1에 “Button Clicked”출력
            label1.Text = “Button Clicked”;
        }

빌드(F7) 후 실행(F5)하기


사용자 삽입 이미지

Getting Started with Windows Forms

http://msdn.microsoft.com/en-us/library/ms229601(VS.80).aspx

ArrayList

ArrayList예제 참고자료: http://dotnetperls.com/arraylist

ArrayList pArray = new ArrayList();
pArray.Add(person1);
pArray.Add(student1);
pArray.Add(faculty1);


// 만약 Person,Student,Faculty 객체를 하나만 생성한 후 for문에서 공유해 사용할 경우
// 마지막으로 입력된 데이터로 모든 데이터값이 치환됨
Person p = new Person();
for (int i = 0; i < 5; i++) {
    p.Name = Console.ReadLine();           // 입력정보
    p.ID = int.Parse(Console.ReadLine()); // 입력정보
    p.Phone = Console.ReadLine();          // 입력정보
    p.Address = Console.ReadLine();       // 입력정보
    pArray.Add(p);                                  // 리스트에 들어간 모든 원소는 동일한 p
}

// 아래와 같이 for문 안에 Person p = new Person()와같이 새로운 객체를 생성해야
// 각자 다르게 입력된 정보가 들어가게 됨
for (int i = 0; i < 5; i++) {
    Person p = new Person();
    p.Name = Console.ReadLine();           // 입력정보
    p.ID = int.Parse(Console.ReadLine()); // 입력정보
    p.Phone = Console.ReadLine();          // 입력정보
    p.Address = Console.ReadLine();       // 입력정보
    pArray.Add(p);                                  // 이때 p는 새로운 Person객체
}


 


// pArray의 원소를 Object형으로 받아서 처리할 경우 아래와같이 함
foreach (Object pt in pArray)
{
   if (pt is Person)
   {
      ((Person)pt).Print();
   }
   if (pt is Student)
   {
      ((Student)pt).Print();
   }
   if (pt is Faculty)
   {
      ((Faculty)pt).Print();
   }
}


// 아래와 같이 pArray 원소를 Person형으로 받아서 처리할 경우 pt.Print()만 호출하면
// 복잡한 형변환 과정이 필요없이 객체 형에 따라서 재정의된 메소드가 자동호출
foreach (Person pt in pArray)
{
    pt.Print();
}

C# Formatting Numeric String

Formatting Standard Numeric Format Strings
http://msdn.microsoft.com/en-us/library/s8s7t687(VS.80).aspx

Formatting Custom Numeric Format Strings
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

Formatting Numeric Format Strings (Alignment)
Integer    http://www.csharp-examples.net/string-format-int/
Double    http://www.csharp-examples.net/string-format-double/
DateTime http://www.csharp-examples.net/string-format-datetime/
Align String with Spaces  http://www.csharp-examples.net/align-string-with-spaces/
Indent String with Spaces http://www.csharp-examples.net/indent-string-with-spaces/
IFormatProvider               http://www.csharp-examples.net/iformatprovider-numbers/
Custom IFormatProvider   http://www.csharp-examples.net/custom-iformatprovider/






















































Character Description Examples Output
C or c Currency Console.Write(“{0:C}”, 2.5); $2.50
Console.Write(“{0:C}”, -2.5); ($2.50)
D or d Decimal Console.Write(“{0:D5}”, 25); 25
E or e Scientific Console.Write(“{0:E}”, 250000); 2.50E+05
F or f Fixed-point Console.Write(“{0:F2}”, 25); 25
Console.Write(“{0:F0}”, 25); 25
G or g General Console.Write(“{0:G}”, 2.5); 2.5
N or n Number Console.Write(“{0:N}”, 2500000); 2,500,000.00
X or x Hexadecimal Console.Write(“{0:X}”, 250); FA
Console.Write(“{0:X}”, 0xffff); FFFF

TryParse

while (true) //국어 점수를 받는 반복문
{
      Console.Write(“국어 점수를 입력하세요(0~100) : “);
      string str = Console.ReadLine();

      value = int.TryParse(str, out s.kor);
      if (value == false || s.kor < 0 || s.kor > 100) {
              Console.WriteLine(“범위에 벗어난 점수를 입력하셨습니다”);
              continue;
      }
      else {
              Console.WriteLine(“국어성적 : {0}”, s.kor);
              break;
      }
}


HW1에서 국어,영어,수학을 입력받는 부분에서 위의 유형이 가장 대표적이였다.
그러나 while을 사용하여 아래의 코드와 같이 간단히 구현할 수 있다.



int value;  // needed for TryParse
string str; // needed for ReadLine


Console.Write(“국어성적을 입력하세요(0-100): “);
str = Console.ReadLine();
while ((!int.TryParse(str, out value))||(value<0 || value>100))
{
       Console.Write(“다시 국어성적을 입력하세요 (0-100): “);
       str = Console.ReadLine();
}
s.kor = int.Parse(str);

Generic List Class

<<List<T> 컬랙션 클래스의 메소드>>

public List<TOutput> ConvertAll<TOutput> (Converter<T, TOutput> converter)
-리스트 객체의 각 원소를 TOutput 형으로 변환하여 리스트로 반환

public bool Exists(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 원소가 있는지 여부를 반환

public T Find(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 첫번째 원소를 반환

public List<T> FindAll(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 모든 원소를 리스트로 반환

public int FindIndex(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 첫번째 원소의 인덱스를 반환

public int FindLastIndex(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 마지막 원소의 인덱스를 반환

public void ForEach(Action<T> action)
-리스트에 있는 모든 원소에 대해 action을 수행

public bool TrueForAll(Predicate<T> match)
-리스트에 있는 모든 원소가 match 조건을 만족하는 지 여부를 반환

<<대리자(Delegate)>>

public delegate void Action<T>(T object)
-T 형의 매개변수를 하나 받고 반환값이 없는 메소드

public delegate TOutput Converter<TInput, TOutput>(TInput input)
-TInput 형의 매개변수를 받고 이를 TOutput 형으로 변환하여 반환하는 메소드

public delegate bool Predicate<T>(T object)
-T 형의 매개변수를 받아 그것이 특정 조건을 만족하는지를 반환하는 메소드

public delegate int Comparison<T>(T x, T y)
-x, y 두 객체를 비교하는 메소드로 x가 y보다 작으면 음수, 같으면 0, 크면 양수를 반환하는 메소드