폼 간 데이터 전송 방법
2021. 6. 17. 22:59
728x90
우선, 저는 Visual Studio 2017 버전을 사용중이며, Windows form (줄여서 WinForm)에서 작성한 코드를 여기다가 공유해보려 합니다. 외부 폼으로부터 데이터를 받아오고 전송하는 방법들을 찾는 데 많은 시간과 과정이 필요했기 때문에, 다른 분들도 아래의 코드를 유용하게 쓰시길 바랍니다!
제가 발견한 방법은 총 2가지가 있습니다:
- Delegate, event 사용
- 외부 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 |