2 양식이 있습니다. Form1과 Form2. form1에서 버튼을 클릭하면 폼 2를 열고 form1을 숨 깁니다.Form2를 닫고 Form1을 표시하십시오.
하지만 지금 Form2를 닫고 form1을 표시하면 어떻게하는지 알 수 없습니다.
질문 번호 2 : Form1 (레이블, 단추)의 요소에 대한 Update() 메서드가있는 경우. form2에서이 메서드를 사용할 수 있습니까?
감사
2 양식이 있습니다. Form1과 Form2. form1에서 버튼을 클릭하면 폼 2를 열고 form1을 숨 깁니다.Form2를 닫고 Form1을 표시하십시오.
하지만 지금 Form2를 닫고 form1을 표시하면 어떻게하는지 알 수 없습니다.
질문 번호 2 : Form1 (레이블, 단추)의 요소에 대한 Update() 메서드가있는 경우. form2에서이 메서드를 사용할 수 있습니까?
감사
요청한 두 가지 질문 모두 쉽게 이벤트로 해결할 수 있습니다. Form1에가 iteself을, 형식 2를 만들 자사의 이벤트를 등록, 숨길 Form1을 유발의 버튼을 클릭
public partial class Form2 : Form
{
//Declare your event
public event EventHandler updateEvent;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//If the event is registered fire it, otherwise do nothing
if (updateEvent != null)
{
//fire the event and give our custom event args some text
updateEvent(sender, e);
}
}
private void button2_Click(object sender, EventArgs e)
{
//Another way to close the form, beside clicking the red "X"
Close();
}
}
, 그리고 쇼 :
를 Form1 :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Declare your new form
Form2 form2 = new Form2();
//Register the update event
form2.updateEvent += new EventHandler(handleUpdateEvent);
//Register form closed event
form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
Visible = false;
//Show your new form
form2.Show();
}
void form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.Visible = true;
}
//Handler for the event from form 2
void handleUpdateEvent(object sender, EventArgs e)
{
this.BackColor = Color.Red;
}
}
Form2를 여기에 코드입니다 form2. "업데이트 버튼"(form2의 button1)을 클릭하면 Form1에서 일부 업데이트가 수행됩니다. 이 데모에서는 Form1의 배경색 만 변경합니다. form2가 닫히면 닫힌 이벤트는 form1로 다시 실행됩니다. 그러면 form1이 다시 표시되도록하여 이벤트를 처리합니다.
는 형식 2의 Form.FormClosing를 Form1에 대한 이벤트 처리기를 추가합니다. 발생하면 Form1을 다시 표시하십시오.
이벤트는 FormClosing
이벤트를 사용해야합니다. form2
을 작성중인 코드에서 form1
을 종료 이벤트에 첨부하십시오. 이것은 form1
이 form2
을 알게 된 이유입니다.
private void OpenForm()
{
var form2 = new Form2();
form2.FormClosing += FormIsClosing;
form2.Show();
this.Hide();
}
private void FormIsClosing(object sender, FormClosingEventArgs e)
{
if (e.Cancel)
{
return;
}
this.Show();
this.Update();
}
이 작업을 수행하지 마십시오. Form2는 Form1에 대해 알 필요가 없습니다. Form1에 FormClosing 이벤트 처리기를 넣으면됩니다. e.Cancel을 반드시 확인하십시오. 그리고 소유자가 더 이상 설정할 필요가 없다는 것에주의하십시오, 그냥 * this *입니다. –
@HansPassant 사실, 고맙습니다. 내가 왜 다른 방식으로했는지 모르겠다. (그러나 내 코드를 바꿨다. – gzaxx