I 양식 (MdiParent)를 가지고와 함께 두 번 같은 양식을 엽니 다양식은 다음 코드로 MdiParent
private void toolStripMenuItem_ClickForm2(object sender, EventArgs e)
{
if(frm2 == null)
{
frm2 = new Form2(frm1);
frm2.MdiParent = this;
}
frm2.Show();
}
private void toolStripMenuItem_ClickForm1(object sender, EventArgs e)
{
if(frm1 == null)
{
frm1 = new Form1();
frm1.MdiParent = this;
}
frm1.Show();
}
menuitemForm2를 클릭하면 form2에서 DB 액세스 및 DatagridView 채우기, frm1이 frm2로 초기화되지 않음)를 클릭 한 다음 menuitemForm1을 클릭하여 frm1을 표시합니다. 그것은 같은 form1의 두 개의 창을 만들 것입니다.
누구도 전에 이상한 행동을 했습니까? 때문에 코멘트
부록 ...
frm2는 Frm1에는에이 같은 작업을 수행합니다
Form1 frm ;
public Form2(Form1 form1)
{
frm = form1;
}
public void Optionalmethod()
{
if(frm == null)
{
frm = new Form1();
frm.MdiParent = this.MdiParent;
}
frm.Show();
}
Optionalmethod()
는 테스트 중에 실행되지 않습니다. 내 논리를 Form1에 따르면
1. Inside form2
2. In the Main form
문제가되지 않지만, 그것의 단 하나의 인스턴스를 가지고 중요하다. 그게 null 인 경우에도 참조를 전달하기로 결정했기 때문에 그 이유가 있습니다
당신이 menuitemForm2을 클릭하고 당신이 두 가지 형태가 어떻게해야합니까, menuitemForm1 클릭하지 않으면? 그렇다면 클릭 이벤트가 두 번 유선처럼 처리 된 것 같습니다. – LarsTech
"frm1"이 초기화되지 않았거나 아직 표시되지 않은 경우 Form2의 생성자에 null을 전달합니다. 그런 다음 어떻게해야합니까 (Form1에 대한 참조가 어떻게 생깁니 까?). 아마도 둘 다 null인지 확인하고 아무것도 표시하기 전에 인스턴스화해야합니다. 또한, 그 핸들러에서 Form1의 MdiParent를 설정하지 않습니다 (Form2의 MdiParent ...를 null로 설정할 수 있습니다!). –
@Idle_Mind 두 번째 MdiParent를 잘 잡습니다. 그것을 놓쳤습니다. OP는 아마 거기에 저장되어있는 "데이터"에 더 관심이 있기 때문에 양식을 지나쳐서는 안됩니다. 스파게티빌에 오신 것을 환영합니다. – LarsTech