좋은질문

C# 클래스에서 Form의 컨트롤 값 받아오기

JustineBaek 2014. 9. 10. 16:09

 

 

 

 

C#에서 Class의 개념은 VB 에서 모듈과 비슷한걸로 알고 있는데요.

 

예를들어 C#에서 모듈처럼 Class를 사용하기 위해서

 

class test
        {
            public test()
            {

                    textbox1.text = "테스트"

            }
        }

 

이런식으로 만들어

모듈처럼 Class 를 다른곳에서 호출해서 사용하려고하는데....

 

class에서 textbox1을 인식을 못하네요.

 

오류메세지는

오류 1 중첩 형식 'testForm.test_1.test'을(를) 통해 외부 형식 'testForm..test_1'의 비정적 멤버에 액세스할 수 없습니다. 

라고 뜹니다...

 

앞에 this. 을 붙여봤지만 소용이 없네요.

VB에서는 모듈에서 Formname.textbox1.value 이런식으로 폼을 앞에 선언해주면 받아왔었는데..

 

해결방법 부탁드립니다.

 

 

 

 

안녕하세요?

 

1. 예상대로 vb6.0에서 c#으로 바꾸어 고군분투 하시는 것으로 판단되네요. 화이팅 입니다.

 

2. 아래의 코드를 참고하세요.

     public partial class Form1 : Form
     {
          public Form1()
          {
               InitializeComponent();
          }

 

          // 테스트로 textBox1, button1을 하나 올렸습니다.

          private void button1_Click(object sender, EventArgs e)
         {
               // 전후 비교를 위해 내용을 비웁니다.
               textBox1.Text = "";


               // MyClass 인스턴스를 만들고, 메소드에 처리를 요청합니다. 
               MyClass my = new MyClass();                     // 1. 인스턴스 생성
               my.SetText( textBox1, "안녕하세요?" );     // 2. 메소드 호출 .Text가 아닙니다.
               my = null;                                                   // 3. 리소스 반환

 

               // 메시지가 찍혔는지 확인해 봅니다.
               MessageBox.Show(textBox1.Text);
          }

     }

 

     // Form 밖의 다른 클래스를 하나 만듭니다.

     using System.Windows.Forms;

     class MyClass
     {

          // 메서드를 하나 만들어 기능을 제공합니다.
          public void SetText(object box, string message)
         {

               // 전달된 매개 변수를 TextBox로 형변환 합니다.
               TextBox textBox = box as TextBox;

 

               // as 연산자는 형변환에 성공하면 해당 타입을, 실패하면 null을 반환합니다.

               if (textBox != null)
               {
                    textBox.Text = message;
               }
          }
     }

 

3. VB6.0과 닷넷은 중요한 차이가 있습니다.

 

   -. VB6.0은 완전한 OOP가 아니지만, VB.NET / C#은 완전한 OOP 언어라는 점 입니다.

 

   -. VB6.0에서는 전역변수를 모으는 모듈 개념이 있지만, 닷넷에서는 모든 것이 캡슐화된

      클래스 입니다. 정적클래스 개념은 여기에서 논외로 하겠습니다.

 

   -. VB6.0에서의 클래스와 닷넷에서의 클래스 구조는 개념상 거의 일치합니다. 

       ​(필드, 프로퍼티, 메서드, 이벤트, 생성자, 소멸자)

       VB6.0에서도 클래스를 정의하면, 이를 사용하기 위해서 인스턴스를 new로 할당해야 사용할 수 있습니다. 

       하지만, VB6.0의 클래스는 상속이 지원되지 않으며, 따라서 생성자/오버라이드 등의 OOP

       개념이 문법적으로 존재하지 않습니다.

 

   -. VB6.0에서의 폼 같은 경우, 프로젝트가 시작되면 메모리 전역 공간에 잡혀 타 클래스나,

       다른 폼에서 이름으로 직접 접근할 수 있었지만, C#이나 VB.NET에서의 폼은 이와 달리

       순수한 클래스 입니다. 밖에서 폼으로 직접 접근할 수가 없습니다. 인스턴스를 만들지 

       않으면.  

   

 

이해와 문제 해결에 도움이 되시길 바랍니다.

감사합니다.

 

 

 

written by

  

legend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C과외/C#과외/VB과외 프로그래밍 과외.서울인천경기-방문강의.기타전국-화상강의.제대로 체계적으로 배우고싶은분들.15년경력 프리랜서.삼성/포스코/한진 등.

서울,인천,경기,분당,일산,과천,산본,부천,부평,평촌,안산,안양,광명,용인,시흥,성남,수원,평택,오산,화성,동탄,천안,아산,

c#프로그래밍1:1과외, 15년 이상 프로젝트 경력의 프리랜서 직접 강의,

c#프로그래밍 과외, c#프로그래밍교육, IT·컴퓨터·컴퓨터과외비·프로그래밍과외, c# 강좌, c# 프로그래밍,

데이터베이스, 데이터베이스 프로그래밍, db, DB, 과외비,컴퓨터1:1,컴퓨터개인지도,컴퓨터실무과외,컴퓨터과외,컴퓨터1:1과외,

서울,인천,경기,부천,안산,분당,일산,천안,과천,산본,안양,광명,평촌,수원,평택,오산,용인,부평,시흥,성남,화성,동탄

광주,부산,대구,대전,마산,창원,울산,전주,군산,원주,강릉,충청남도,충청북도,강원도,경상남도,경상북도,전라남도,전라북도,제주도