카테고리 없음

[씨#] 양식을 앞당기는 문제

행복을전해요 2020. 12. 22. 23:31

else 절에서 form2.Show ()를 호출하는 것을 잊었 기 때문에 작동하지 않습니다. 코드가 잘못되었습니다. 이미있는 경우 Form2의 새 인스턴스를 만들지 않습니다. 또한 Winforms에는 Application.OpenForms가 양식 인스턴스를 추적하지 못하게하는 버그가 있습니다.

가장 좋은 방법은 FormClosed 이벤트 처리기를 사용하여 양식의 수명을 명시 적으로 추적하여 나중에 다시 찾을 필요가 없도록하는 것입니다.

    Form2 form2;

    private void showForm2() {
            if (form2 == null) {
                        form2 = new Form2();
                                    form2.FormClosed += delegate { form2 = null; };
                                            }
                                                    form2.Show();
                                                            form2.Focus();
                                                                }
                                                                

이벤트 처리기에서 showForm2를 호출합니다.

-------------------

그냥 전화 form2.Show()하고 BringToFront. 그래도`new Form2 () '를 선언해야합니다.

private Form2 form2;

private void ShowForm2()
{
  if (form2 == null)
    {
        form2 = new Form2();
            form2.FormClosed += delegate { form2 = null; };
              }
                form2.Show();
                  form2.BringToFront();
                  }
                  
                  private void Form1_KeyDown(object sender, KeyEventArgs e)
                  {
                    ShowForm2();
                    }
                    
                    private void ToolStripMenuItem_Click(object sender, EventArgs e)
                    {
                      ShowForm2();
                      }
                      

Hans의 코드에서 양식을 닫고 다시 열 때 null 문제를 처리하는 위임을 추가했습니다.



출처
https://stackoverflow.com/questions/7420063