해당 양식이 이미 열려있는 경우 MDI 컨테이너 내에서 특정 폼을 열지 못하게 할 방법이 있습니까?중복 MDI 자식 폼 방지
답변
:
foreach (Form form in Application.OpenForms)
{
if (form.GetType() == typeof(MyFormType))
{
form.Activate();
return;
}
}
Form newForm = new MyFormType();
newForm.MdiParent = this;
newForm.Show();
가 AFAIK 표준 방법이 없습니다를 참조하십시오. 직접 구현해야합니다. 나는 이런 식으로 할 거라고 : 스레드 안전이 우려입니다
class TheForm: Form
{
private static TheForm Instance;
private TheForm() // Constructor is private
{
}
public static Show(Form mdiParent)
{
if (Instance == null)
{
// Create new form, assign it to Instance
}
else
Instance.Activate(); // Not sure about this line, find the appropriate equivalent yourself.
}
protected override OnFormClose(EventArgs e)
{
Instance = null;
base.OnFormClose(e);
}
}
경우 해당 lock
의를 추가합니다.
스레드 안전은 문제가되지 않습니다 vb.net에서 나를 위해이 코드가 작동 . – Groo
당신은 이것이 싱글 톤 패턴의 구현임을 추가 할 수 있습니다. 나는 Fredrik Mörk의 솔루션을 선호하지만, SOC –
이 게시물은 매우 오래지만, 내가 생각
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form form in Application.OpenForms)
{
if (form.GetType() == typeof(Form2))
{
form.Activate();
return;
}
}
Form2 newForm = new Form2();
newForm.MdiParent = this;
newForm.Show();
}
작업이 코드 그러면 도움이 추가됩니다.
양식이 최소화 된 경우에도 처리해야합니다. 여기에 완벽한 예입니다
foreach (Form form in this.MdiChildren)
{
if (form.GetType() == typeof(frmMain))
{
if (form.WindowState == FormWindowState.Minimized)
{
form.WindowState = FormWindowState.Normal;
}
form.Activate();
return;
}
}
Form frm = new frmMain();
frm.MdiParent = this;
frm.Show();
당신은 단지 하나의 스레드에서 GUI 컨트롤에 액세스하기 때문에
For Each f As Form In Application.OpenForms If TypeOf f Is form_name Then f.Activate() f.WindowState = FormWindowState.Normal f.StartPosition = FormStartPosition.WindowsDefaultLocation f.WindowState = FormWindowState.Maximized
Return
End If
Next
form_name .MdiParent = Me
form_name .Show()
- 1. 다른 양식의 MDI 자식 폼
- 2. MDI 자식 폼 호출, 생성하지 않음
- 3. MDI 자식 폼 Vista에서 최대화 문제
- 4. PropertyStore 및 MDI 자식 폼 정보
- 5. MDI 폼의 MDI 컨테이너 크기로 설정된 자식 폼 크기
- 6. MDI WinForm 응용 프로그램 및 중복 하위 폼 메모리 누수
- 7. MDI 자식 표시 항상 다른 MDI 자식 맨 위에
- 8. Delphi MDI - 열기/닫기/활성화 자식 폼 처리
- 9. C# .Net 패널 컨트롤 및 MDI 자식 폼 - 문제
- 10. MDI 자식 폼은 가시성
- 11. MDI 자식 창으로 프로그램
- 12. MDI 자식 폼로드
- 13. C# MDI 부모 MDI 자식 닫는 때 검색합니까?
- 14. 하나의 MDI 자식 폼이 다른 모든 mdi 자식 폼에서 포커스를 훔치는 것을 방지하는 방법
- 15. ControlBox가없는 MDI 자식 폼을 열고 닫는 방법
- 16. 자식 폼 컨트롤을 비활성화하는 방법은 무엇입니까?
- 17. 방지 중복 된 항목
- 18. CFgrid의 중복 업데이트 방지
- 19. 중복 SQL 항목 방지
- 20. 중복 로그인 기록 방지
- 21. JavaDoc 주석의 중복 방지
- 22. jQuery의 함수 중복 방지
- 23. fd 중복 파이썬에서 자식 프로세스
- 24. 부모로부터 자식 폼 닫기
- 25. AlphaBlend 자식 폼
- 26. 기본 MDI 부모 폼의 MenuList를 사용하여 MDI 자식 폼을 여는 방법
- 27. .Net에서 변경된 Mdi Children
- 28. 오페라 폼 chaching 방지 mp3
- 29. F #의 코드 중복 방지
- 30. 브라우저/액티비티 실행 중복 방지
대신 form.Activate()를 사용한다. form.WindowState = FormWindowState.Normal; 전자와 달리 후자는 해당 창을 최소화하더라도 작동합니다. – docesam