블로그 이미지
likeban

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Notice

'C#'에 해당되는 글 4

  1. 2011.09.19 [C#] 콘솔창에서 윈도우폼 띄우기
  2. 2011.08.10 [C#] 시간차 계산하기
  3. 2011.07.11 [C#] 새로운 form 띄우기
  4. 2011.06.28 [C#] as(1)
2011.09.19 15:27 IT


프로젝트를 생성할 때, Windows Forms 응용 프로그램을 선택하고 만들면 쉽게 윈도우폼을 만들 수 있지만,

저는 윈도우폼이 주가 되도록 프로그램을 짜려니 답답하더라구요.

그래서 이번에는 콘솔창으로 프로젝트를 만든 뒤에 윈도우폼을 출력하는 방법을 알아보겠습니다.

우선 콘솔 기반으로 프로젝트를 생성합니다.
 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace test

{

    class Program

    {

        static void Main(string[] args)

        {

        }

    }

}


위와 같은 소스 코드가 기본으로 생성됩니다.

윈도우 폼을 사용하기 위해서는 Form을 상속받아야 합니다.

Main이 있는 Program 클래스에 Form을 상속받아 사용해도 되지만, 저는 새로운 클래스를 만들어서 작업해주었습니다.

MainForm이라는 클래스를 하나 추가해주었습니다.

그리고, 생성된 MainForm의 클래스에 Form을 상속받도록 수정하고 생성자를 정의해줍니다.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace test

{

    class MainForm : Form

    {

        public MainForm()

        { 

        }

    }

}


이렇게 수정해주고 나면 Form에서 형식을 찾을 수 없다면서 컴파일 에러가 날 것입니다.

아무리 using을 해주려고 해도 불가능합니다.

콘솔로 프로젝트를 생성하면,  윈도우 폼과 관련된 서비스가 참조되어 있지 않기 때문에 문제가 발생하게 되는 것입니다.


이럴 때에는 프로젝트에서 오른쪽버튼을 누른 뒤, 참조추가를 선택합니다.

그리고, .Net 탭으로 이동하여, 

System.Windows.Forms
System.Drawing
 

이 두 가지를 추가합니다.

Forms는 윈도우 폼을 사용하기 위함이고, Drawing은 폼에서 컨트롤(button, listView...)들을 사용하기 위함입니다.

이렇게 추가가 끝나면 using으로 등록이 가능합니다. :)


컴파일 에러를 다 잡았으면, 메인으로 돌아와서 다음과 같이 수정합니다.

namespace test

{

    class Program

    {

        static MainForm m_MainForm;


        static void Main(string[] args)

        {

            m_MainForm = new MainForm();

            Application.Run(m_MainForm);

        }

    }

}


메인에서 사용한 Application.Run 메소드를 다른 곳에서 사용하면 적절한 타이밍에 윈도우 폼을 불러들일 수 있을 것 같습니다.

근데 굳이 메인에서 처음에 불러들인다면, 이런방식으로 사용할 필요가 있나...? 하는 생각도 듭니다.

아니면, 이 상태로 메인폼을 쓰레드에서 따로 실행시킨다면, 메인폼과는 별개로 다른 작업을할 수 있기 때문에 괜찮을 것 같지만, 문제가 생기지 않을까 하는 생각도 드네요.ㅎㅎㅎ

저작자 표시 비영리 변경 금지
신고
posted by likeban
2011.08.10 15:47 IT



C#에서 시간계산하는 방법이 몇가지가 있지만, 저는 Ticks를 이용하는 것이 가장 편하더군요.

timeGap을 구할 때, 10000를 나눠준 이유는 Ticks을 게산할 때 1초가 100000000로 계산되기 때문입니다.

저는 예전에 프로그램을 짤 때 1초를 1000으로 해주던 습관이 있어서 구해진 시간차에 10000를 나누어 줌으로써 1초를 1000으로 계산해 준 것입니다. :)


long startTime = System.DateTime.Now.Ticks;

while(true)
{

long nowTime = System.DateTime.Now.Ticks;

double timeGap = (nowTime - startTime) / 10000.0f;

if( timeGap >5000)

break;

}

저작자 표시 비영리 변경 금지
신고
posted by likeban
2011.07.11 10:04 IT



프로젝트-> 새 항목 추가 -> Window Form
을 선택하여 작업할 Form을 하나 추가하여 줍니다.







새로운 Form을 띄울 시점에서 아래의 코드를 추가합니다.

Form2 dlg = new Form2 ();
dlg.ShowDialog();

띄워진 Form을 사라지게 하려면 사라질 시점에서
this.close();
를 추가합니다.
저작자 표시 비영리 변경 금지
신고
posted by likeban



C#으로 구성된 코드를 보면

int a = 10;
double b = 20;

b = a as double;

종종 요런 구성을 볼 수 있다.

C#에서 as강제형변환을 해주는 연산자이다.

강제형변환이라하면 그냥 (double)a; 라고 하면 되지 굳이 as 연산자를 사용할 필요가 있을성싶다.
보통 형변환이라고 하면 낮은형에서 높은형으로 변환하는 것을 말한다.(ex: int->double)
강제형변환이라고 하는 것은 높은형에서 낮은형으로 변환하거나 에러가 날 수 있는 형변환을 말한다.(ex:double->int , int->string)

일반적인 형식으로 강제형변환을 하게 되면 예외가 발생하게 된다.
하지만, as 연산자를 사용하게 되면, 불가능한 형변환(문제가 제기될 수 있는)시 예외가 발생하는 것이 아니라.
Null값이 대입된다.

ex)
obj ob1 = 1234;
string str;

str = ob1 as string;

// 불가능한 형변환이므로 이 때에 str의 값은 NULL로써 값을 출력해도 아무것도 출력되지 않는다.
저작자 표시 비영리 변경 금지
신고

'봉자의 > 잡다구리 사전' 카테고리의 다른 글

[PC용어] IPC  (0) 2011.07.04
[통신] ETX  (0) 2011.06.28
[통신] STX  (0) 2011.06.28
[C#] Var  (0) 2011.06.28
[C#] as  (1) 2011.06.28
주혈흡충병  (0) 2011.06.12
posted by likeban
prev 1 next

티스토리 툴바