테라텀(Tera Term)의 시리얼 포트 설정를 모델로 삼아 폼을 똑같이 만들어 봤습니다.
위의 새로 만든 frmConnection.cs [디자인] 은 도구상자에서 다음과 같은 폼들을 사용해서 만들었습니다.
이제 프로그램을 실행했을 때, 메인 Form 의 메뉴에서 설정->시리얼 포트(S) 를 클릭하면 위의 포트설정 창이 뜨도록 해 보겠습니다.
먼저 frmMain.cs[디자인] 탭으로 가서, 메뉴의 설정->시리얼포트(S) 를 더블 클릭하합니다.
설정->시리얼포트(S) 를 더블 클릭하면 private void 시리얼포트ToolStripMenuItem_Click() 함수가 자동으로 frmMain.cs 파일에 생깁니다. 자세한 위치는 다음과 같습니다.
frmConnection m_ClassConnection = new frmConnection();
frmConnection 타입의 객체 m_ClassConnection 을 만듭니다.
frmConnection 타입의 객체 m_ClassConnection 을 만듭니다.
그리고 나서 private void 시리얼포트ToolStripMenuItem_Click() 함수 안에 윈도우 창을 여는 함수를 넣어 줍니다.
(참고로 현재 문법이 많이 딸려서 설명이 좀 안됩니다. ^^)
(코드)
namespace try_term
{
public partial class frmMain : Form
{
frmConnection m_ClassConnection = new frmConnection();
public frmMain()
{
InitializeComponent();
}
private void 시리얼포트ToolStripMenuItem_Click(object sender, EventArgs e)
{
m_ClassConnection.ShowDialog();
}
}
}
위와 같이 코드를 추가하고, 실행했을 때.. 메뉴의 설정->시리얼 포트를 클릭하니까 시리얼 포트 설정 창이 떴음을 확인했습니다.
그리고, C# 을 오늘 연습하다 한참 해멘 것이 있었습니다.
이 프로그램을 실행하자 마자, 시리얼포트 설정창을 뜨게 해 보려고 했는데...
분명히 제대로 한 것 같은 데 생각대로 안됐었습니다.
그 이유는, 제가 예제 소스만을 보고 frmMain_Load() 함수를 코드를 직접 쳐서 넣었는데,
frmMain_Load() 함수는 컴파일러에 의해서 자동으로 만들어 지는 함수였습니다.
이 함수는 frmMain.cs[디자인] 탭에서 윈도우 창의 대가리를 더블클릭 하면 생성됩니다.
Load 이벤트 함수는, 절대 코드를 예제 보고 쳐 넣으면 안되는 것이네요. 2시간 헤맸네요. ㅜㅜ
이 함수를 Load 이벤트 함수라고도 하는데, 일반 함수가 아닌 특수한 의미의 함수입니다.
폼이 생성될 때, 처음으로 실행되는 함수가 load 이벤트 함수이므로, 이 함수 안에 m_ClassConnection.ShowDialog(); 코드를 넣어 주면 되겠죠? ^^
수정한 프로그램을 실행 시켰더니, 처음에 먼저 시리얼포트 설정 창이 뜨고, 이 참을 닫으면 메인창이 나타났습니다.
그리고 나서 메뉴의 설정->시리얼포트를 클릭하니까, 다시 시리얼 포트 설정 창이 떴습니다.
생각대로 잘 됐음을 확인했습니다.
최종 코드는 다음과 같습니다.
(소스 코드)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
namespace try_term
{
public partial class frmMain : Form
{
frmConnection m_ClassConnection = new frmConnection();
public frmMain()
{
InitializeComponent();
}
private void 시리얼포트ToolStripMenuItem_Click(object sender, EventArgs e)
{
m_ClassConnection.ShowDialog();
}
private void frmMain_Load(object sender, EventArgs e)
{
m_ClassConnection.ShowDialog();
}
}
}
댓글 없음:
댓글 쓰기