728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.

이번에 시간있을때 다시 해보고 싶은 내용이긴한데 쓸데가 별로 없어보이네요. 그래도 급한거 정리되면 다시 해보고 싶습니다. 

20년전 나의 관심글을 읽어보며 참 부지런하게 살았다 싶네요


 

응용 프로그램 개발에서 가장 일반적인 시나리오는 폼에 데이터를 표시하는 것입니다. 이 연습에서는 단일 테이블에서 가져온 데이터를 데이터 표에 표시하는 간단한 Windows Form에 대해 설명합니다. 모눈은 편집이 가능하며 데이터를 변경하고 데이터베이스를 업데이트할 수 있습니다. 결과는 복잡하지 않지만 이 연습에는 폼을 이용하여 데이터에 액세스할 때 사용하는 기본 절차의 대부분이 나와 있습니다.

이 연습을 따라 하려면 다음과 같은 요건을 갖추어야 합니다.

  • Pubs SQL Server 샘플 데이터베이스가 있는 서버에 액세스할 수 있어야 합니다.

이 연습은 다음과 같은 단계로 구성되어 있습니다.

  • Windows Form을 만듭니다.
  • 폼에 바인딩할 데이터 집합을 만들고 구성합니다. 여기에는 데이터베이스의 데이터로 데이터 집합을 채우는 쿼리를 만드는 작업도 포함됩니다.
  • DataGrid 컨트롤을 폼에 추가한 다음 데이터에 바인딩합니다.
  • 데이터 집합을 채우기 위한 코드를 추가합니다.
  • 데이터 집합의 변경 내용을 데이터베이스에 다시 보내기 위한 코드를 추가합니다.

연습을 완료하면 다음과 같은 폼이 만들어집니다.

프로젝트와 폼 만들기

첫 단계에서는 Windows Form을 만듭니다.

프로젝트와 폼을 만들려면

  1. 솔루션이 열려 있는 경우에는 파일 메뉴에서 솔루션 닫기를 선택합니다.참고   프로덕션 프로젝트에서는 동일 솔루션에 여러 개의 프로젝트가 있는 경우가 많습니다. 그러나 이 연습에서는 열려 있는 솔루션을 닫고 새로운 솔루션과 프로젝트를 만들기 때문에 작업할 내용이 기존 폼이나 데이터 집합 등과 충돌하지 않습니다.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
  3. 프로젝트 형식 창에서 Visual Basic 프로젝트, Visual C# 프로젝트 또는 Visual C++ 프로젝트를 선택합니다.
  4. 템플릿 창에서 Visual Basic 및 Visual C# 프로젝트용 Windows 응용 프로그램을 선택하거나 Visual C++ 프로젝트용 Windows Forms 응용 프로그램 (.NET)을 선택합니다.
  5. 사용하는 명명 규칙을 따르는 고유한 이름을 프로젝트에 지정합니다. 예를 들어, 이 프로젝트의 이름을 Walkthrough_Simple1로 지정할 수 있습니다.
  6. 이름을 부여하고 새 솔루션을 지정한 다음 확인을 클릭합니다.새 프로젝트가 생성되어 Windows Form 디자이너에 새 폼이 표시됩니다.

데이터 집합 생성 및 구성

Windows Forms 응용 프로그램에서 데이터에 액세스하는 대부분의 시나리오가 그렇듯이 이 연습에서도 데이터 집합에 대한 작업을 수행합니다. 데이터 집합은 작업할 레코드를 포함하는 컨테이너, 즉 캐시입니다.

참고   데이터 집합을 사용하는 것은 데이터 액세스 옵션의 하나이며 일부 시나리오에서는 최상의 선택이 아닙니다. 그러나 Windows Forms 응용 프로그램에서는 데이터 집합을 사용하는 것이 좋으므로 이 연습에서는 데이터 집합을 사용합니다. 자세한 내용은 데이터 액세스 전략 권장 사항을 참조하십시오.

이 연습에서는 데이터 집합을 폼에 추가합니다. 그러나 데이터 집합이 아직 없으므로 폼에 수동으로 추가하지 않고 대신 아래와 같은 단계를 수행합니다.

  • 마법사를 사용하여 데이터 어댑터를 만듭니다. 어댑터에는 데이터베이스 정보를 읽고 쓸 때 사용하는 SQL 문이 들어 있습니다. 마법사는 필요한 SQL 문을 정의하도록 도와주며 필요한 경우 데이터베이스와의 연결을 만들어 줍니다.
  • 데이터 집합 스키마를 생성합니다. 이 단계에서는 액세스하고 있는 테이블과 열을 바탕으로 Visual Studio에서 새로운 형식의 데이터 집합 클래스를 생성할 수 있습니다. 데이터 집합 클래스를 생성할 때 그 클래스의 인스턴스가 폼에 추가됩니다.

이 단원의 모든 절차를 그대로 따라야 합니다. 그러지 않을 경우에는 연습의 다음 부분에서 사용할 데이터 집합이 폼에 포함되지 않습니다.

데이터 어댑터에 대한 자세한 내용은 데이터 어댑터 소개를 참조하십시오. 데이터 집합에 대한 자세한 내용은 데이터 집합 소개를 참조하십시오.

데이터 연결 및 데이터 어댑터 구성

첫 단계에서는 나중에 데이터 집합을 채우는 데 사용할 SQL 문을 포함하는 데이터 어댑터를 만듭니다. 이 과정에서 데이터베이스에 액세스하기 위한 연결을 정의합니다. 마법사를 사용하여 데이터 어댑터를 구성하면 데이터 액세스에 필요한 SQL 문을 손쉽게 만들 수 있습니다.

참고   마법사가 완료된 후에는 다음 단원을 계속 진행하여 데이터 집합을 만들고 폼의 데이터 액세스 부분을 완성해야 합니다.
보안 정보   서버 이름, 사용자 이름, 암호 등과 같은 연결 문자열의 세부 사항을 저장하면 응용 프로그램 보안 문제가 발생할  있습니다. 데이터베이스 액세스를 제어할 때는 Windows 통합 보안을 사용하는 것이 더욱 안전한 방법입니다. 자세한 내용은 데이터베이스 보안을 참조하십시오.

데이터 연결 및 데이터 어댑터를 만들려면

  1. 도구 상자의 데이터 탭에서 OleDbDataAdapter 개체를 폼으로 끌어 옵니다.참고   SQL Server 7.0 이상에서 잘 작동하도록 최적화된 SqlDataAdapter 개체를 사용할 수도 있지만, 이 연습에서는 좀 더 일반적으로 사용되며 OLE DB 호환 데이터 소스에 대한 ADO.NET 액세스를 제공하는 OleDbDataAdapter 개체를 사용합니다.
  2. 데이터 어댑터 구성 마법사가 시작되어 연결 및 어댑터 만드는 작업을 도와 줍니다.
  3. 마법사에서 다음과 같은 작업을 수행합니다.
    1. 두 번째 창에서 SQL Server Pubs 데이터베이스를 가리키는 연결을 만들거나 선택합니다.
    2. 세 번째 창에서 SQL 문을 사용하여 데이터베이스에 액세스하도록 지정합니다.
    3. 네 번째 창에서 다음과 같은 SQL 문을 만듭니다.
      SELECT au_id, au_lname, au_fname, city, state, phone, contract
      FROM authors
      SQL 문을 만드는 데 도움을 받으려면 쿼리 작성기를 클릭하여 쿼리 작성기를 실행합니다.
    4. 참고   이 연습에서는 authors 테이블의 모든 행으로 데이터 집합을 채웁니다. 프로덕션 응용 프로그램에서는 주로 필요한 열과 행만 반환하는 쿼리를 만들어 데이터 액세스를 최적화합니다. 예제를 보려면 연습: 매개 변수화된 쿼리를 사용하여 Windows Form에 데이터 표시를 참조하십시오.
  4. 마침을 클릭하여 마법사를 완료합니다.마법사가 완료되면 데이터베이스 액세스 방법에 대한 정보가 포함된 연결(Visual Basic의 경우 OleDbConnection1, Visual C# 또는 Visual C++의 경우 oleDbConnection1)이 만들어집니다. 또한 데이터베이스의 어떤 테이블과 열에 액세스할 것인지를 정의하는 쿼리가 포함된 데이터 어댑터(Visual Basic의 경우 OleDbDataAdapter1, Visual C# 또는 Visual C++의 경우 oleDbDataAdapter1)가 만들어집니다.

마법사가 완료된 후 여기서 만든 SQL 쿼리를 기반으로 데이터 집합을 만듭니다. 자세한 내용은 다음 단원을 참조하십시오.

데이터 집합 만들기

데이터베이스에 연결할 방법을 설정하고 원하는 정보를 지정(데이터 어댑터에서 SQL 명령 사용)한 다음에는 Visual Studio를 통해 데이터 집합을 만들 수 있습니다. Visual Studio에서는 데이터 어댑터에 지정한 쿼리에 따라 데이터 집합을 자동으로 생성할 수 있습니다. 데이터 집합은 클래스의 요소(테이블, 열 및 제약 조건)를 설명하는 XML 스키마(.xsd 파일)를 기반으로 하는 DataSet 클래스의 인스턴스입니다. 데이터 집합과 스키마의 관계에 대한 자세한 내용은 ADO.NET을 사용한 데이터 액세스 소개를 참조하십시오.

데이터 집합을 생성하려면

  1. 데이터 메뉴에서 데이터 집합 생성을 선택합니다.   데이터 메뉴가 표시되지 않으면 폼을 클릭합니다. 즉, 폼에 포커스가 있어야 메뉴가 나타납니다.
  2. 데이터 집합 생성 대화 상자가 표시됩니다.
  3. 새로 만들기 옵션을 선택하고 데이터 집합의 이름을 dsAuthors로 지정합니다.데이터 집합에 추가할 테이블 선택 목록에서 authors 테이블을 선택합니다.
  4. 이 데이터 집합을 디자이너에 추가합니다. 확인란을 선택한 다음 확인을 클릭합니다.형식화된 데이터 집합 클래스(dsAuthors)와 이 데이터 집합을 정의하는 스키마가 생성됩니다. 솔루션 탐색기에 새 스키마(dsAuthors.xsd)가 표시됩니다.마지막으로 새 데이터 집합 클래스의 인스턴스(DsAuthors1 또는 dsAuthors1)가 폼에 추가됩니다.
  5.    솔루션 탐색기에서 모든 파일 표시를 클릭하면 스키마 파일의 종속 .vb 또는 .cs 파일을 볼 수 있습니다. 이 파일들에는 새 데이터 집합 클래스를 정의하는 코드가 들어 있습니다.

이제 데이터베이스에서 정보를 가져와 데이터 집합을 채우는 데 필요한 모든 항목을 설정했으므로 데이터를 표시할 폼을 만들 준비가 되었습니다.

데이터를 표시하기 위한 DataGrid 컨트롤 추가

이 연습에서는 데이터 집합의 모든 레코드를 동시에 표시할 수 있는 DataGrid 컨트롤을 추가합니다. 텍스트 상자와 같이 레코드를 한 번에 하나씩 표시하는 개별 컨트롤을 사용할 수도 있습니다. 그러나 이 방법을 사용하려면 폼에 탐색 기능을 추가해야 하므로 작업을 간소화하기 위해 데이터 표를 사용합니다.

참고   개별 텍스트 상자를 사용하여 데이터 집합의 레코드를 표시하는 방법에 대한 예제는 연습: 매개 변수화된 쿼리를 사용하여 Windows Form에 데이터 표시를 참조하십시오.

데이터를 표시하려면 데이터 표를 데이터 집합에 바인딩해야 합니다.

바인딩된 DataGrid 컨트롤을 폼에 추가하려면

  1. 이미 폼 디자이너로 전환하지 않았으면, 현재 창 맨 위에 있는 탭을 클릭하여 폼 디자이너로 전환합니다.
  2. 도구 상자의 Windows Forms 탭에서 DataGrid 컨트롤을 폼으로 끌어 옵니다.
  3. F4 키를 눌러 속성 창을 표시합니다.
  4. DataSource 속성에서 DsAuthors1 또는 dsAuthors1을 데이터 소스로 선택합니다. DsAuthors1.Authors 또는 dsAuthors1.Authors를 선택하지 마십시오.
  5. DataMember 속성에서 authors를 선택합니다.이 두 속성을 설정하면 DsAuthors1 데이터 집합에 있는 authors 데이터 테이블이 모눈에 바인딩됩니다.
  6. 모든 열이 표시되도록 모눈의 크기를 조정합니다. 여러 개의 저자 레코드를 볼 수 있도록 모눈의 높이를 변경합니다.

DataGrid 컨트롤 채우기

만든 데이터 집합에 데이터 표를 바인딩하더라도 데이터 집합 자체가 자동으로 채워지는 것은 아니므로 데이터 어댑터 메서드를 호출하여 데이터 집합을 직접 채워야 합니다. 데이터 집합을 채우는 방법에 대한 자세한 내용은 데이터 집합 소개를 참조하십시오.

DataGrid 컨트롤을 채우려면

  1. 도구 상자의 Windows Forms 탭에서 Button 컨트롤을 폼으로 끌어 옵니다.
  2. 단추 이름을 btnLoad로 지정한 후 단추의 Text 속성을 Load로 설정하여 캡션을 변경합니다.
  3. 단추를 두 번 클릭하여 단추의 Click 이벤트에 대한 이벤트 처리 메서드를 만듭니다.
  4. 이 메서드에서는 생성한 데이터 집합을 지운 다음, 채울 데이터 집합을 전달하여 데이터 어댑터의 Fill 메서드를 호출합니다.다음 예제는 완성된 메서드를 보여 줍니다.
  5. ' Visual Basic Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click DsAuthors1.Clear() OleDbDataAdapter1.Fill(DsAuthors1) End Sub // C# private void btnLoad_Click(object sender, System.EventArgs e) { dsAuthors1.Clear(); oleDbDataAdapter1.Fill(dsAuthors1); } // C++ private: System::Void btnLoad_Click(System::Object * sender, System::EventArgs * e) { dsAuthors1::Clear(); oleDbDataAdapter1::Fill(dsAuthors1); }

데이터베이스 업데이트

사용자가 모눈을 변경할 경우 컨트롤에서는 업데이트된 레코드를 데이터 집합에 자동으로 저장합니다. Windows Forms에서 데이터 바인딩 아키텍처는 데이터 바인딩된 컨트롤의 값을 컨트롤이 바인딩된 데이터 행에 기록합니다.

참고   Web Form 페이지에서는 데이터 바인딩의 동작이 약간 다릅니다. Web Forms 페이지에서 데이터를 바인딩하는 단계별 예제를 보려면 연습: Web Forms 페이지에 데이터 표시  연습: Web Forms에서 데이터베이스 업데이트 쿼리를 사용하여 데이터 업데이트를 참조하십시오.

그러나 데이터 집합 작업에서는 업데이트에 두 단계가 필요합니다. 즉, 데이터 집합에 데이터를 채운 후 그 데이터를 데이터베이스로 보내야 합니다. 데이터 어댑터에서는 Update 메서드를 사용하여 업데이트를 수행합니다. 이 메서드에서는 데이터 집합에 지정된 데이터 테이블의 모든 레코드를 검사하여 레코드가 변경된 경우에는 적합한 Update, Insert 또는 Delete 명령을 데이터베이스로 보냅니다. 자세한 내용은 데이터 집합 업데이트 소개를 참조하십시오.

이 연습에서는 사용자가 업데이트 내용을 데이터베이스에 보내고자 할 때 사용할 수 있는 단추를 폼에 추가합니다.

데이터베이스를 업데이트하려면

  1. 도구 상자의 Windows Forms 탭에서 Button 컨트롤을 폼으로 끌어 옵니다.
  2. 단추 이름을 btnUpdate로 지정한 다음 단추의 Text 속성을 Save Changes in Database로 설정하여 캡션을 변경합니다.
  3. 단추를 두 번 클릭하여 단추의 Click 이벤트에 대한 이벤트 처리 메서드를 만듭니다.
  4. 이 메서드에서는 데이터베이스에 보낼 업데이트 내용이 들어 있는 데이터 집합을 메서드에 전달하여 데이터 어댑터의 Update 메서드를 호출합니다. MessageBox 개체를 사용하여 확인 텍스트를 표시합니다.다음 예제는 완성된 메서드를 보여 줍니다.
  5. ' Visual Basic Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click OleDbDataAdapter1.Update(DsAuthors1) MessageBox.Show("Database updated!") End Sub // C# private void btnUpdate_Click(object sender, System.EventArgs e) { oleDbDataAdapter1.Update(dsAuthors1); MessageBox.Show("Database updated!"); } // C++ private: System::Void btnUpdate_Click(System::Object * sender, System::EventArgs * e) { oleDbDataAdapter1::Update(dsAuthors1); MessageBox::Show("Database updated!"); }

테스트

이제 폼을 테스트하여 저자 데이터가 폼의 모눈에 표시되는지와 사용자가 업데이트할 수 있는지 여부를 확인할 수 있습니다.

폼을 테스트하려면

  1. F5 키를 눌러 폼을 실행합니다.참고   이 경우 데이터베이스 로그인 자격 증명이 저장되는 방식으로 인해 System.Data.SqlClient.SqlException 형식의 예외가 자주 발생합니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 디자인 타임에 액세스할 수 있는 데이터베이스를 런타임에 액세스할 수 없습니다.를 참조하십시오.
  2. 폼이 표시되면 Load 단추를 클릭합니다.저자들의 목록이 모눈에 표시됩니다.
  3. 모눈에서 레코드를 변경합니다.모눈에서 다른 레코드로 이동하면 변경 내용이 보존됩니다. 변경 내용을 기억해 두십시오.
  4. Load 단추를 다시 클릭합니다.그러면 데이터베이스의 데이터 집합이 다시 로드되어 모눈이 새로 고쳐집니다. 데이터 집합의 변경 내용을 데이터베이스에 저장하지 않았으므로 3단계에서 변경한 내용이 보존되지 않았습니다.
  5. 모눈에서 레코드를 다시 변경합니다.
  6. Save Changes in Database 단추를 클릭합니다.메시지 상자가 표시되지만 모눈에는 변경된 내용이 없습니다.
  7. Load 단추를 다시 클릭하여 데이터베이스의 데이터를 다시 로드합니다.이번에는 변경 내용을 데이터베이스에 저장했으므로 5단계에서 변경한 내용이 보존됩니다.

다음 단계

이상의 연습에서는 데이터를 폼에 표시하는 데 필요한 기본 단계를 설명했습니다. 이 외에도 이 연습에서 만든 폼을 다음과 같이 향상시킬 수 있습니다.

  • 모눈의 색, 글꼴 등을 변경합니다.
  • 사용자가 명시적으로 로드하지 않아도 모눈에 데이터가 표시되도록 합니다. 그렇게 하려면 폼의 New 메서드(Visual Basic의 경우)나 생성자(C#의 경우)에 Fill 메서드를 추가하고 Load 단추를 제거합니다.
  • 선택한 정보만 모눈에 표시합니다. 대부분의 경우, 표시되는 내용은 사용자가 런타임에 입력한 정보를 토대로 합니다(예: 특정 도시 출신의 저자만 표시). 그렇게 하려면 매개 변수화된 쿼리를 만들어야 합니다. 자세한 내용은 연습: 매개 변수화된 쿼리를 사용하여 Windows Form에 데이터 표시를 참조하십시오.
  • 데이터 액세스와 사용자 인터페이스를 분리합니다. 이 연습에서는 데이터 집합을 통해 직접 데이터에 액세스하는 폼을 만들었습니다. 좀 더 유연하고 관리 가능한 폼을 디자인하려면 데이터 액세스를 처리하는 데이터 액세스 구성 요소를 만듭니다. 그러면 필요에 따라 폼(즉, 사용자 인터페이스)이 구성 요소와 상호 작용할 수 있게 됩니다. 또한 동일한 구성 요소를 여러 폼 및 다른 구성 요소에서 사용할 수 있게 되어 폼을 만들 때마다 데이터 액세스를 다시 디자인해야 하는 부담이 없어집니다. 구성 요소 기반의 데이터 액세스 만들기에 대한 자세한 내용은 연습: 분산 응용 프로그램 만들기를 참조하십시오.
728x90
728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.


 

자기 컴의 ip 주소 알아내는 방법입니다.

        Dim a As String
        Dim b As IPAddress
        Dim i As IPHostEntry
        Dim c As String

        a = Dns.GetHostName()
        i = Dns.GetHostByName(a)
        For Each b In i.AddressList
            c = b.ToString()
            MessageBox.Show(c)
        Next

//=======================================================

소켓 통신시 한글처리

소켓으로부터 스트림 Object를 받고서 StreamReader 와 StreamWriter를
생성할때 Encoding 개체를 넘겨줍니다.

VB.NET 샘플에는 Encoding 개체를 ASCII 로만 사용하였기에 한국에
맞지 않는 샘플이라 하겠습니다.(?)

System.Text 네임 스페이스에 보면 UTF7, UTF8, Unicode, ASCII 등등
있는데 유니코드 Encoding 개체를 보면 왠 리틀/빅인디안어?
한국어는 없습니다.

그렇기 때문에 Encoding에 한국어 코드 페이지를 지정하여 예약되지
않은 Encoding 개체를 생성해야 합니다.
한국어 코드 페이지는 949 입니다.
다음 소스에서 처럼 Encoding 개체와 스트림 개체를 생성 하시기 바랍니다.

        Public Sub New(ByVal Socket As System.Net.Sockets.Socket)
            Try
                _Socket = Socket

                Dim Stream As New System.Net.Sockets.NetworkStream(_Socket)
                Dim En As System.Text.Encoding
                Dim Korean As System.Text.Encoding
                Korean = En.GetEncoding(949)


                Reader = New System.IO.StreamReader(Stream, Korean)
                writer = New System.IO.StreamWriter(Stream, Korean)
                Connections.Add(Me, UniqueKey)
            Catch
                Me.Finalize()
            End Try
        End Sub

파일 스트림을 다루실때 역시 Encoding을 필요로 할지 모르겠습니다.
만약 파일에서 한글이 안읽히면 코드페이지를 지정해 주시기 바랍니다.

//=============================================================

728x90
728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.


(devpia 게시물)

VB.NET에서 데이터 구성요소를 Drag&Drop하지 않고, 
코드로만 DB를 연결하여 Datagrid에 뿌리는 코드입니다.
=============================================================
      Dim Conn As New SqlClient.SqlConnection()
        Dim ds As New DataSet()
        Dim da As Object

        Dim strSQL As String
        strSQL = "Select * from Authors"

        Conn.ConnectionString = "User ID=sa;Initial Catalog=pubs;Data Source=test_server"
        Conn.Open()
        da = New SqlClient.SqlDataAdapter(strSQL, Conn)

        da.Fill(ds, "authors")
        Conn.Close()
        DataGrid1.DataSource = ds.Tables(0).DefaultView
===============================================================

이번에는 Visual C#에서 사용한 코드입니다.

using System.Data.SqlClient;
private SqlConnection conn = new SqlConnection("User ID=sa;Initial Catalog=;Data Source=(local)");

public DataSet GetData()
 {
    string strSQL = "select * from authors";
    SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);
    DataSet ds = new DataSet();
    da.Fill(ds,"Authors");
    conn.close;
    return ds;
 }

728x90
728x90

 

언젠가 여러 언어를 공부하면서 다 같이 사용해서 프로그램을 짜야 할때가 오지 않을까 라는 막연한 생각에 고민을 하다가 나와 같이 생각하고 정리한 분의 글이 있어서 공유해 봅니다.

 

1. 개요

이 글은 쉽게 쓰여진 글입니다.

내용이 쉽다기 보다는 그냥 편하게 쓴 글이라는 뜻입니다.

그렇기 때문에 퇴고없고 그렇지는 않겠지만 다소의 오류가 있을 수도 있습니다.

제가 마지막 강좌를 올린 것이 벌써 반년이 되어 가는 군요..

전에 올리던 강좌는 계속 되어 질 것입니다.

이번 강좌는 편하게 쓰는 것이므로 2회정도 될것 같습니다.

이번 회는 VB.NET 과 C# 을 동시에 사용하는 법에 대해서 다룰 것입니다.

다음 회는 VB.NET 과 VC.NET 을 동시에 사용하는 법에 대해서 다룰 것입니다.


2. 글을 쓰게 된 동기

전번 주말 스터디 할때 였습니다.

Access Modifier 를 다루고 있었는데

누군가 물어보았습니다. (제가 아는 VB.NET 을 아주 잘한다고 생각되는분)

Access Modifier 를 조정하면 동시에 여러 언어를 사용할 수 있냐고 말입니다.

물론 이 얘기에서 전버전 VS 6.0 과 같이 언어 통합시 생기는 난해한 면이 있다면

사용할 수 없는거나 마찬가지라는 전제가 있었습니다.

저는 당연히 할 수 있다고 말은 했지만 과거 Beta 2.0 때 도스창에서 컴파일하는

방법만 실제로 해봤던 저는 좀 마음이 그랬습니다.

그래서 현재 VS.NET RTM Ent 에서 여러 언어를 동시에 사용하는 법을

알려드리려 하는 것입니다.


3, 저작권

이 글의 저작권은 없습니다.

심지어 이 글 그대로를 다른 사이트에 옮기면서

자신이 지었다고 하셔도 좋습니다.

VB 의 발전을 위해서라면 이 정도는 아무것도 아니라 생각합니다.


4. 알아야 하는 이유

저는 VB.NET 이 VS.NET 중에서 최고라고 생각합니다.

하지만 현재 MS 는 마케팅적으로 C# 을 밀고 있고 C# 에 투자하는 사람이

많기 때문에 C# 소스가 아무래도 많은건 사실입니다. 

하지만 단지 나와 있는 C# 소스가 많기 때문에 억지로 C# 을 선택할 필요는

없습니다.

왜냐하면 다들 아시다시피 C# 이나 VB.NET 이나 Managed C++ 이나

IL 로 바뀌기 때문입니다.

하지만 집중해야 할 것은 그것들을 뭉쳐서 사용하는 방법을 모르면

IL 로 바뀌기 때문에 언어가 통합된다는 것은 아무런 의미가 없습니다.

그리고 이 글을 읽으신 후 VB.NET 개발자들도 C# 관련 사이트들을

주의깊게 살펴보시기 바랍니다.

만일 C# 소스로 무엇인가가 나와 있다면 그것이 VB.NET 소스나 다를바 없다는

생각을 갖으시기 바랍니다.


4. Access Modifier

첫째로 아셔야 할것은 Access Modifier 입니다.

한국말로는 접근한정자라고 쓰지요.

그냥 이후부터는 접근한정자라고 쓰겠습니다.

접근 한정자란 클래스나 변수에 접근할 수 있는 범위를 결정하느 것입니다.

접근 한정자는 다섯가지로 그들과 그들의 내용은 아래와 같습니다.


Public 모든 곳에서 접근가능
Protected 자신과 자신을 상속한 클래스에서 접근가능
Friend 동일 프로젝트내에서 접근가능
Protected Friend 동일 프로젝트내에 있으면서 자신이거나 자신을 상속한 클래스에서 접
근가능
Private 자신내에서만 접근가능


이중에서 다른 프로젝트와 상호작용하기 위해 일반적으로 사용하는

키워드는 Public 입니다.

엄밀하게 말하면 Protected 도 포함되지만

우선은 다른 프로젝트와 상호작용하기 위해서는 그냥 Public 을 쓴다고

생각하시는 것이 좋을 듯 싶습니다.


5. 어셈블리(Assembly)

기존 윈도우즈 프로그래밍을 하시다가 .NET 으로 넘어오면서 중요하게 아셔야 할 사항은

어셈블리입니다.

이와 관련해서는 자유게시판에서 제 아이디로 검색해보시면 1회 스터디 프레젠테이션

자료가 나오는데 이를 참고하시기 바랍니다.

내용이 너무 많기 때문입니다.

현재 상호작용하기 위한 방법은 참조하려는 프로젝트를 Class Library 로 만드는 것입니
다.

이렇게 Class Library 를 만들면 확장자가 dll 이라는 형태로 파일이 만들어지는데

이것은 기존의 dll 과는 다른 Assembly 입니다.

현재 제가 알려드리는 방법은 Assembly 에 대한 것입니다.

기존의 윈도우 DLL 과의 상호작용에 대한 방법은 아니니 참고하시기 바랍니다.


6. How To Use VB.NET With CSharp

제가 보여드릴건 C# 으로 폼을 하나 만들고

VB.NET 에서도 폼을 하나 만들고

프로그램이 실행되면 우선 VB.NET 에 있는 폼이 뜨고

VB.NET 의 폼이 뜰때 C# 의 폼을 VB.NET 이 띄우고

VB.NET 의 폼에 있는 버튼을 클릭했을때 C# 의 폼에 있는 TextBox1 의 Text 값을

VB.NET 에서 바꿀것입니다.

예제는 첨부해 놓았으니 참고하시기 바랍니다.


6.1 준비작업

우선 VB.NET 과 C# 프로젝트를 한 솔루션에 띄웁니다.

VB.NET 윈도우 응용프로그램을 하나 만드신 뒤 솔루션탐색기에서

Add New Project 하셔서 C# 윈도우 응용프로그램을 추가하시면 됩니다.


6.2 화면처리

우선 C# 프로젝트의 이름은 CSFORM 으로 하였습니다.

그 안에는 디폴트 이름을 갖는 TextBox1 이 있습니다.

VB.NET 은 버튼이 하나 있습니다.

VB.NET 프로젝트의 이름은 VBFORM 입니다.

그리고 나서 VBFORM 프로젝트에서 마우스 오른쪽 버튼을 눌러서

시작프로젝트로 지정합니다.


6.3 C# 프로젝트 Output Type 변경

C# 프로젝트의 Output Type 을 솔루션 탐색기에서 프로젝트를 선택한 뒤

오른쪽 마우스 버튼을 눌러서 Property 를 선택합니다.

General 탭에서 Output Type 을 "Class Library" 로 변경합니다.


6.4 접근 한정자의 변경

C# 폼의 코드를 열어서 폼디자이너가 만들어내는 코드중 

컨트롤에 대한 선언부에 접근 한정자를 변경시킵니다.

private System.Windows.Forms.TextBox textBox1; // 원본
public  System.Windows.Forms.TextBox textBox1; // 변경한것

물론 원래 있던건 필요없습니다. private 에서 public 로 바꾸면

다른 프로젝트에서도 컨트롤에 대한 접근이 가능해집니다.


6.5 컴파일

C# 프로젝트를 컴파일 합니다. 

실행할 필요는 없습니다. 

단지 어셈블리를 만들어내기 위해서 컴파일하는 것입니다.


6.6 VB.NET 에서 참조

문제 없이 컴파일이 끝났으면 VBFORM 프로젝트로 가셔서

Reference 부분에서 마우스 오른쪽 버튼을 눌러 참조를 설정합니다.

참조할때 Projects 탭을 눌러 선택하셔야 합니다.

만일 6.5 과정을 거치지 않으셨다면 Projects 탭에는 

아무것도 나오지 않습니다.


6.7 연동

우선 C# 폼을 VB.NET 의 Form1 클래스내에서 전역으로 써야 하므로 다음과 같이 선언합
니다.

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private f As CSFORM.Form1    ' <-- 이부분


그리고 VB.NET 의 Form1_Load 부분에 다음과 같이 씁니다.

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        f = New CSFORM.Form1()
        f.Text = "C#"
        Me.Text = "VB.NET"
        f.Show()
    End Sub

처음은 C# 폼의 인스턴스를 형성하고 C# 폼의 Text 를 "C#" 이라고 고쳤습니다.

그리고 자신의 폼의 텍스트를 "VB.NET" 이라고 썼습니다.

마지막엔 C# 폼을 띄웁니다.

Button1_Click 이벤트핸들러에 다음과 같이 씁니다.

        f.textBox1.Text = "C# ?"


6.8 실행

실행시키면 VBFORM 은 Load 되면서 CSFORM의 Form1 을 띄우고

자신과 C# 폼의 텍스트를 변경합니다.

버튼을 클릭하면 VB.NET 에서 C# 폼의 컨트롤에 접근해서 내용을 고칩니다.


7. 해제

소스가 나와있는 모든 C# 코드는 위와같이 사용할 수 있습니다.

 

part1.rar
0.04MB

728x90

+ Recent posts