폼 간 데이터 전송 방법

2021. 6. 17. 22:59
728x90

우선, 저는 Visual Studio 2017 버전을 사용중이며, Windows form (줄여서 WinForm)에서 작성한 코드를 여기다가 공유해보려 합니다. 외부 폼으로부터 데이터를 받아오고 전송하는 방법들을 찾는 데 많은 시간과 과정이 필요했기 때문에, 다른 분들도 아래의 코드를 유용하게 쓰시길 바랍니다!

제가 발견한 방법은 총 2가지가 있습니다:

  1.  Delegate, event 사용 
  2.  외부 class폼에서 get, set 속성 사용 

 

*참고로, 소스코드에서  "  cls.NL"  이라고 적혀있는 건, 개행을 의미하는 Environment.NewLine 입니다.

그럼 한 번 살펴보도록 합시다!

 

 


 

 [ Delegate, event 사용 ] 

Main Form에 작성 :

    private void btn_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        //form2에 이벤트 추가
        f2.FormSendEvent += new Form2.FormSendDataHandler(DiseaseUpdateEventMethod);
        f2.ShowDialog();
    }
    
    private void DiseaseUpdateEventMethod(object sender)
    {
        //form2에서 delegate로 이벤트 발생하면 현재 메서드 호출
        tb.Text = sender.ToString();
    }



Form2에 작성 :

    public partial class Form2 : Form
    {
        public delegate void FormSendDataHandler(string s); //delegate 선언
        public event FormSendDataHandler FormSendEvent; //event 생성   
        public Form2 
        {
        	InitializeComponent();
        }
        private void btn_Click(object sender, EventArgs e)
        {
        	//Main Form으로 데이터 전송
            this.FormSendEvent(tb.Text);   
            this.Close();
        }
    }

 

 


 

이번엔 2번째 방법을 다뤄보겠습니다.

 [ 외부 class폼에서 get, set 속성 사용 ] 

Main Form에 작성 :

using System;
using System.Data;
using System.Windows.Forms;
namespace DemoApplication08
{
	public partial class FormPractice : Form
    {       
        public FormPractice()
        {       
            InitializeComponent();
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            try
            {       
                Con_Database db = new Con_Database();   
                db.Open();

                string sql = "";
                sql += "DECLARE @Now  datetime" + clsNL.NL;
                sql += "SELECT @Now = CONVERT(date, SYSDATETIME()) " + clsNL.NL;
                sql += "SELECT ID, NM, RESID, BTHDT, SEX, " + clsNL.NL;
                sql += "       (CONVERT(int, CONVERT(char(8), @Now, 112)) - CONVERT(char(8), BTHDT, 112))/ 10000 AS AGE, ADDR " + clsNL.NL;
                sql += " FROM table01 " + clsNL.NL;
                sql += " WHERE ID = '" + tbPID.Text.ToString() + "' " + clsNL.NL;

                DataSet ds = db.GetDataSet(sql);

                // 각 텍스트박스에 값을 넣어줌
                tbNM.Text = ds.Tables[0].Rows[0]["NM"].ToString();
                tbRESID.Text = ds.Tables[0].Rows[0]["RESID"].ToString();
                tbBTHDT.Text = ds.Tables[0].Rows[0]["BTHDT"].ToString();
                tbSEX.Text = ds.Tables[0].Rows[0]["SEX"].ToString();
                tbADDR.Text = ds.Tables[0].Rows[0]["ADDR"].ToString();
                tbAGE.Text = ds.Tables[0].Rows[0]["AGE"].ToString();

                db.Close();
            }
            catch (Exception ex)  // 예외 처리
            {   
                MessageBox.Show(ex.ToString());
            }
        }
        
        private void btnInsert_Click(object sender, EventArgs e)
        {
            try
            {       
                clsRegData rd = new clsRegData();  //clsRegData 클래스의 rd 인스턴스 생성

				// 각 텍스트박스에 있는 값을 clsRegData() 클래스로 전달
                rd.ID = tbID.Text;
                rd.NM = tbNM.Text;
                rd.SEX = tbSEX.Text;
                rd.BTHDT = tbBTHDT.Text;
                rd.AGE = tbAGE.Text;
                rd.ADDR = tbADDR.Text;
                rd.RESID = tbRESID.Text;

                rd.InsertTable1();
                MessageBox.Show("등록 완료");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}




clsRegData에서 작성 : 

using System;
using System.Data;
namespace Demo
{
    class clsRegData
    {       
        public string ID { get; set; }   
        public string RESID { get; set; }
        public string NM { get; set; }
        public string SEX { get; set; }
        public string BTHDT { get; set; }
        public string AGE { get; set; }
        public string ADDR { get; set; }

        public int InsertTable1() //메서드 생성
        {            
            Con_Database db = new Con_Database(); //Database 연결   
            db.Open();
            
			// SQL문에서 객체를 통해 private변수들에 접근하고 Main Form으로 데이터 전송
            string strSql = "";
            strSql += " INSERT INTO table02 (ID, RESID, NM, SEX, BTHDT, AGE, ADDR) " + clsNL.NL;
            strSql += " VALUES ('" + ID + "'" + clsNL.NL;
            strSql += "         , '" + RESID + "'" + clsNL.NL;
            strSql += "         , '" + NM + "'" + clsNL.NL;
            strSql += "         , '" + SEX + "'" + clsNL.NL;
            strSql += "         , '" + BTHDT + "'" + clsNL.NL;
            strSql += "         , '" + AGE + "'" + clsNL.NL;
            strSql += "         , '" + ADDR + "' ) " + clsNL.NL;

            int result = 0;            
            result = db.ExecuteSql(strSql);
            db.Close();

            return result;
        }
    }
}
728x90

'C# > Visual C# 코드 리뷰' 카테고리의 다른 글

Xtrareport 연동  (0) 2021.07.29
C#으로 DB 연결  (0) 2021.07.29
XML Schema 파일 생성 방법  (0) 2021.07.15
System.Environment.NewLine;  (0) 2021.07.15
Visual Studio 2017  (0) 2021.06.11

BELATED ARTICLES

more