태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바


서로 다른 Form으로 변수를 전달하는 방법에 대해서 알아보자.

 

제가 만든 프로그램으로 예를 들겠습니다.

 

먼저 열려있는 form_score에서 버튼을 클릭하면 새로운 형태의 form_play 이 열리고,

새로 열린 form_play에서  form_score의 변수를 가져오는 프로그램입니다.

(form_score, form_play 는 제가 만든 form의 이름임.)

 

 

 

namespace NaniBandController
{
    [Serializable]
    public class note
    {
        public int str;
        public int frt;
        public int beat;
        public note()
        {
            str = 1;
            frt = -1;
            beat = 0;
        }

    }

 

 

public List<note> score = new List<note>();
public List<note> a_score {get { return score;}}
// a_fs_gt1 이라는 명령어를 이용해서 List<note> 형태의 score를 전송할 수 있도록 하는 부분

// 새로 열리게 되는 form_play 에서 List score를 가져오기위한 설정

...생략}

 

위와 같이 note라는 class를 하나 만들었습니다. 뭐 별로 대단한건 아니니까.

 

저는 note 클래스 형태의 배열(list)를 다른 form으로 전달하려고 하는데요

 

 

이런식으로 note 클래스 형태의 배열을 선언합니다.

 

제가 클래스 선언과 클래스배열 선언을 public으로 했는데요.

 

서로 다른 Form끼리 변수를 주고받아야 하므로 private라고 선언하시면 안됩니다.

(변수 앞에 아무것도 안적으면 자동으로 private형태로 선언되니까 꼭 public을 적어주세요)

 

 

다른 form으로 전달하기위한 함수.

 

 

        private void Button1_Click(object sender, EventArgs e)
        {
            var frm_player = new form_player(this); 

// 그냥 form을 설정하는게 아니라 전달변수에 this를 입력함

// this는 현재 의 form(form_score)를 의미한다는거 아시죠?


            frm_player.ShowDialog();
        }

 

 

 

자 그럼 두 번 째 폼에서는 어떻게 해야하는가?

간단합니다.

 

namespace NaniBandController
{

    public partial class form_player : Form
    {
        List<note> sco = new List<note>();
// form_score 에서 전달하는 List score를 저장할 공간입니다.

 

        private Form_score frm_score;

// Form_score 형태의frm_score 를 하나 선언합니다.

// 두 번째 form인 Form_score 에서 첫번째 폼인 Form_score 를 제어하기위한 부분


        public form_player(Form_score frm) 

 // 보통 public form_player() 라고만 되어있지만 괄호 안에 Form_score(첫번째 form) 형태의 frm을 넣어놓습니다.

// 위에서 보면 두 번째 form을 열 때 
//            var frm_player = new form_player(this); 

// 와 같이 불러왔죠? 이런형태로 form을 열기 위해서 써주는겁니다.


        {
            InitializeComponent();
            this.frm_score = frm;

  // 이제 두 번째 form에서 frm_score 라는 변수명으로 첫번 째 form의 변수를 가져올 수 있습니다.

 

 

... 생략

 

 

 

 

가져오는건 이런식으로 가져오면 되겠죠

 

sco = frm_score.score;

 

아까 보낸 첫 번째 Form 의 score 가 두 번째 Form 의 sco 에 저장되었습니다.

저작자 표시 비영리 변경 금지